我有一个需要动态上下文菜单的应用,可以更改每个项目。我实现这个的方法是创建一个具有Name和Command属性的可绑定对象(我不想在我的viewmodel中创建UI MenuItem对象)。我将ContextMenu.ItemsSource绑定到此集合并设置项目模板,它工作得很好,除了我没有得到分隔符。我略微改变了我的方法,所以我为两个模型对象中的一个定义了两个DataTemplates,并且不再设置项模板(因为它现在必须在菜单项和分隔符模板之间切换)。问题是它现在根本不使用这些模板。我只是在类项上获得标准的ToString。我的模板在这里定义在同一个文件中:
<DataTemplate DataType="{x:Type contracts:BindableMenuItem }">
<MenuItem DataContext="{Binding}" Header="{Binding MenuItemHeader}" Command="{Binding MenuCommand}" />
</DataTemplate>
<DataTemplate DataType="{x:Type contracts:BindableMenuSeparator }">
<Separator />
</DataTemplate>
这些永远不会被使用。我错过了什么?