Sto utilizzando MVVM e desidero associare i dati alla mia lista di MenuViewModels
nel mio menu maim. Che consiste in un insieme di voci di menu e separatori.Come associare correttamente un ViewModel (che include i separatori) al menu di WPF?
Ecco il mio codice MenuItemViewModel:
public interface IMenuItemViewModel
{
}
[DebuggerDisplay("---")]
public class SeparatorViewModel : IMenuItemViewModel
{
}
[DebuggerDisplay("{Header}, Children={Children.Count}")]
public class MenuItemViewModel : IMenuItemViewModel, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public MenuItemViewModel(string header, ICommand command, ImageSource imageSource)
{
Header = header;
Command = command;
ImageSource = imageSource;
Children = new List<IMenuItemViewModel>();
}
public string Header { get; private set; }
public ICommand Command { get; private set; }
public ImageSource ImageSource { get; private set; }
public IList<IMenuItemViewModel> Children { get; private set; }
}
e la mia finestra principale appare così:
<Window.Resources>
<HierarchicalDataTemplate DataType="{x:Type ViewModel:MenuItemViewModel}"
ItemsSource="{Binding Children}">
<MenuItem Header="{Binding Header}"
Command="{Binding Command}"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type ViewModel:SeparatorViewModel}">
<Separator />
</DataTemplate>
</Window.Resources>
<DockPanel>
<Menu DockPanel.Dock="Top"
ItemsSource="{Binding MenuItems}">
</Menu>
</DockPanel>
Dovrebbe essere roba molto semplice. Sfortunatamente, la voce di menu sembra errata o il separatore è vuoto menuItem
(a seconda di quello che ho provato).
Quindi, come posso ottenere il mio Menu
per trovare i miei due DataTemplates
?