1
我想从我的基本视图模型动态绑定上下文菜单。我设法在功能上做我想做的事情,但我坚持我的动态上下文菜单看起来和我的静态菜单相比。似乎有一个额外的菜单项。我的视图模型看起来像这样。为什么动态生成时我的上下文菜单看起来不同
public ObservableCollection<ContextMenuItem> ContextMenuItems { get; protected set; }
protected Constructor
{
ContextMenuItems = new ObservableCollection<ContextMenuItem>()
{
new ContextMenuItem() {Caption = "Add/Replace Supporting Data", Command = AddReplaceSupportingCommand},
new ContextMenuItem() {Caption = "Display SupportingData", Command = DisplaySupportingDataCommand}
};
}
第一个上下文菜单的xaml我们是这样生成的。
<StackPanel Orientation="Vertical" Margin="0,20">
<StackPanel.ContextMenu >
<ContextMenu ItemsSource="{Binding ContextMenuItems}">
<ContextMenu.ItemTemplate>
<DataTemplate>
<MenuItem Command="{Binding Command}" Header="{Binding Caption}"/>
</DataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>
</StackPanel.ContextMenu>
...
</StackPanel>
第二上下文菜单中的XAML看起来像这样
<StackPanel >
<StackPanel.ContextMenu>
<ContextMenu>
<MenuItem Command="{Binding AddReplaceSupportingCommand}" Header="Add or Replace Supporting Data"/>
<MenuItem Command="{Binding DisplaySupportingDataCommand}" Header="Display Supporting Data"/>
</ContextMenu>
</StackPanel.ContextMenu>
...
</StackPanel>
(为了完整性,这里的ContextMenuItem类)
public class ContextMenuItem : ReactiveObject
{
private string _Caption;
public string Caption
{
get { return _Caption; }
set { this.RaiseAndSetIfChanged(ref _Caption, value); }
}
public ReactiveCommand Command { get; set; }
}
的'ItemTemplate'是不应该包含'MenuItem'。你看到的是嵌套的'MenuItem'的结果。改用'ItemContainerStyle'。 –