Interface do Menu Dinâmico do MVVM da ligação com o ViewModel
Eu estou trabalhando com uma equipe no aplicativo LoB. Nós gostaríamos de ter uma dinâmicaMenu
controle, que cria o menu com base no perfil do usuário conectado. Em cenários de desenvolvimento anteriores (ou seja, ASP.NET), usamos para iterar dados que descrevem a coleta e geramMenuItem
dinamicamente. No MVVM como eu faria isso? Posso separar a exibição XAML do ViewModel, que descreve os elementos do menu?
Solução:
Com as contribuições dos comentaristas, consegui ligarMenu
dinamicamente com os dados do ViewModel. esteartigo Foi de grande ajuda também.
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
classe de dados:
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
}