C# WPF上下文菜单项模板,菜单项中的菜单项
我有以下xaml:C# WPF上下文菜单项模板,菜单项中的菜单项,c#,wpf,contextmenu,menuitem,C#,Wpf,Contextmenu,Menuitem,我有以下xaml: <ContextMenu ItemsSource="{Binding TestItems}"> <ContextMenu.ItemTemplate> <DataTemplate DataType="models:TestItemModel"> <MenuItem IsChecked="{Binding IsSelected}" Header="{Binding Header}"
<ContextMenu ItemsSource="{Binding TestItems}">
<ContextMenu.ItemTemplate>
<DataTemplate DataType="models:TestItemModel">
<MenuItem IsChecked="{Binding IsSelected}" Header="{Binding Header}" />
</DataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>
TestItemModel类仅由IsSelected boolean属性和Header string属性组成
TestItems是TestItemModels的列表
数据绑定到contextmenu,但它作为MenuItem中的MenuItem反映在UI中(具有额外的边距,使菜单非常大)。我可以通过将DataTemplate中的MenuItem更改为文本框来解决这个问题,但是我无法再绑定IsSelected(我需要它来实现可视化属性)
关于这一点,我有几个问题:
- 为什么菜单项中有菜单项?这对我来说没有意义,因为它不是绑定到menuitem列表,而是绑定到TestItemModels列表
- 我如何解决这个问题
MenuItem
是容器类型,当它将视图模型转换为可视项时,它会将模板包装在MenuItem
中。同样地,ListBox
将创建ListBoxItem
或ListView
将使用ListViewItem
。要绑定包装的属性,需要使用ItemContainerStyle
或者,如果您愿意,可以使用ItemTemplate
和ItemContainerStyle
在这种情况下,
ItemTemplate
中的任何内容都将成为MenuItem.Header
,但是IsChecked
属性仍然需要绑定在ItemContainerStyle
中@Areius没有问题。很高兴这有帮助。