问题描述
|
我在尝试动态绑定DataGrid上的ContextMenu时遇到了麻烦。 DataGrid绑定到一个效果很好的对象列表:
<DataGrid ItemsSource=\"{Binding DataGridItems}\">
对于每个DataGridItem对象,我都有一个暴露在属性上的MenuItems列表,我想使用该属性绑定到ContextMenu。
我尝试了以下方法,但我想缺少一些东西:
<DataGrid ItemsSource=\"{Binding DataGridItems}\">
<DataGrid.ContextMenu>
<ContextMenu ItemsSource=\"{Binding ContextMenuItems}\" >
<MenuItem Header=\"{Binding Name}\" Command=\"{Binding OnClick}\"></MenuItem>
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid>
public class DataGridItem
{
public ObservableCollection<ContextMenuItem> ContextMenuItems
{
get { return _contextMenuItems; }
}
}
任何帮助或指导将不胜感激。
解决方法
这就是我最终解决它的方式:
<StackPanel.ContextMenu>
<ContextMenu ItemsSource=\"{Binding ContextMenu}\">
<ContextMenu.ItemContainerStyle>
<Style TargetType=\"MenuItem\">
<Setter Property=\"Command\" Value=\"{Binding OnClick}\" />
<Setter Property=\"Icon\">
<Setter.Value>
<Image Source=\"{Binding ImageName}\"></Image>
</Setter.Value>
</Setter>
</Style>
</ContextMenu.ItemContainerStyle>
<ContextMenu.ItemTemplate>
<HierarchicalDataTemplate DataType=\"{x:Type ContextMenu:ContextMenuItem}\" ItemsSource=\"{Binding MenuItems}\">
<TextBlock Text=\"{Binding Name}\"></TextBlock>
</HierarchicalDataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>
,我相信本教程描述了您的问题,但实际上您必须这样做:
<ContextMenu DataContext=\"{Binding PlacementTarget.DataContext,RelativeSource={RelativeSource Self}}\"
ItemsSource=\"{Binding ContextMenuItems}\" />