Tôi đang sử dụng MVVM và tôi muốn dữ liệu liên kết danh sách MenuViewModels
với menu maim của tôi. Trong đó bao gồm một tập hợp các mục trình đơn và dấu phân cách.Làm cách nào để liên kết chính xác ViewModel (bao gồm Dấu phân tách) với Trình đơn của WPF?
Đây là mã MenuItemViewModel tôi:
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; }
}
Và cửa sổ chính của tôi trông như thế này:
<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>
nên được những thứ rất đơn giản. Thật không may, một trong hai mục menu có vẻ sai hoặc dấu tách là một trống menuItem
(tùy thuộc vào những gì tôi đã thử).
Vì vậy, làm cách nào để có được Menu
để tìm hai số DataTemplates
của tôi?