Die Benutzeroberfläche von MVVM Dynamic Menu kann nicht mit ViewModel gebunden werden
Ich arbeite mit einem Team an einer LoB-Anwendung. Wir möchten eine Dynamik habenMenu
Steuerelement, das das Menü basierend auf dem angemeldeten Benutzerprofil erstellt. In früheren Entwicklungsszenarien (insbesondere ASP.NET) werden Daten durchlaufen, die die Erfassung und Generierung beschreibenMenuItem
dynamisch. Wie würde ich das in MVVM machen? Kann ich die XAML-Ansicht von ViewModel trennen, in dem Menüelemente beschrieben werden?
Lösung:
Mit Beiträgen von Kommentatoren konnte ich bindenMenu
dynamisch mit den Daten aus ViewModel. DieseArtikel war auch eine große Hilfe.
XAML:
<HierarchicalDataTemplate DataType="{x:Type self:Menu}" ItemsSource="{Binding Path=Children, UpdateSourceTrigger=PropertyChanged}">
<ContentPresenter Content="{Binding Path=MenuText}" RecognizesAccessKey="True"/>
</HierarchicalDataTemplate>
[...]
<Menu Height="21" Margin="0" Name="mainMenu" VerticalAlignment="Top" HorizontalAlignment="Stretch"
ItemsSource="{Binding Path=MenuItems, UpdateSourceTrigger=PropertyChanged}" ItemContainerStyle="{StaticResource TopMenuItems}">
<Menu.Background>
<ImageBrush ImageSource="/Wpf.Modules;component/Images/MenuBg.jpg" />
</Menu.Background>
</Menu>
Menu
Datenklasse:
public class Menu : ViewModelBase
{
public Menu()
{
IsEnabled = true;
Children = new List<Menu>();
}
#region [ Menu Properties ]
private bool _isEnabled;
private string _menuText;
private ICommand _command;
private IList<Menu> _children;
public string MenuText
{
get { return _menuText; }
set
{
_menuText = value;
base.OnPropertyChanged("MenuText");
}
}
public bool IsEnabled
{
get { return _isEnabled; }
set
{
_isEnabled = value;
base.OnPropertyChanged("IsEnabled");
}
}
public ICommand Command
{
get { return _command; }
set
{
_command = value;
base.OnPropertyChanged("Command");
}
}
public IList<Menu> Children
{
get { return _children; }
set
{
_children = value;
}
}
#endregion
}