Wpf 上下文菜单中的XAML和绑定子菜单项?

Wpf 上下文菜单中的XAML和绑定子菜单项?,wpf,xaml,wpf-controls,Wpf,Xaml,Wpf Controls,我在Datagrid上定义了ContextMenu,但希望将子菜单项绑定到viewmodel上的集合。有人能建议怎么做吗 下面是我试图实现的一个简单示例,但我希望Test1、Test2来自viewmodel上的集合,而不是硬编码的集合。我知道如何将我的收藏绑定到整个ContextMenu,但不知道如何将其绑定到一个子菜单 <ContextMenu> <MenuItem Header="Add to"> <MenuItem Header="Te

我在Datagrid上定义了ContextMenu,但希望将子菜单项绑定到viewmodel上的集合。有人能建议怎么做吗

下面是我试图实现的一个简单示例,但我希望Test1、Test2来自viewmodel上的集合,而不是硬编码的集合。我知道如何将我的收藏绑定到整个ContextMenu,但不知道如何将其绑定到一个子菜单

<ContextMenu>
    <MenuItem Header="Add to">
        <MenuItem Header="Test1" />
        <MenuItem Header="Test2" />
    </MenuItem>
    <MenuItem Header="Remove from All" />
</ContextMenu>

我正在使用3.5 SP1和WPF工具包。

我想我应该做更多的实验。事实证明,这是相对简单的:

<my:DataGrid.ContextMenu>
    <ContextMenu>
        <MenuItem Header="Add to" ItemsSource="{Binding MyItems}">
            <MenuItem.ItemTemplate>
                <DataTemplate>
                    <MenuItem CommandTarget="{Binding}" Click="AddClick">
                        <MenuItem.Header>
                            <TextBlock>
                            <TextBlock.Text><Binding StringFormat="Add to {0}" /></TextBlock.Text>
                            </TextBlock>
                        </MenuItem.Header>
                    </MenuItem>
                </DataTemplate>
            </MenuItem.ItemTemplate>
        </MenuItem>
        <MenuItem Header="Remove from All" />
    </ContextMenu>
</my:DataGrid.ContextMenu>

我想我应该多做些实验。事实证明,这是相对简单的:

<my:DataGrid.ContextMenu>
    <ContextMenu>
        <MenuItem Header="Add to" ItemsSource="{Binding MyItems}">
            <MenuItem.ItemTemplate>
                <DataTemplate>
                    <MenuItem CommandTarget="{Binding}" Click="AddClick">
                        <MenuItem.Header>
                            <TextBlock>
                            <TextBlock.Text><Binding StringFormat="Add to {0}" /></TextBlock.Text>
                            </TextBlock>
                        </MenuItem.Header>
                    </MenuItem>
                </DataTemplate>
            </MenuItem.ItemTemplate>
        </MenuItem>
        <MenuItem Header="Remove from All" />
    </ContextMenu>
</my:DataGrid.ContextMenu>

使用MenuItem.ItemTemplate时出现错误。鼠标悬停在子菜单上时的颜色会让用户误解,他们可以单击来选择菜单,但即使它高亮显示,也不能适用于所有区域。看到图片了吗

然后我使用了这个代码,它对我来说很好

<ContextMenu>
    <MenuItem Header="Add to" ItemsSource="{Binding MyItems}" 
              DisplayMemberPath="{Binding ItemName}">
       <MenuItem.ItemContainerStyle>
           <Style>
              <EventSetter Event="MenuItem.Click" Handler="Menu_Click"/>
           </Style>
        </MenuItem.ItemContainerStyle>
    </MenuItem>
    <MenuItem Header="Remove from All" />
</ContextMenu>

使用MenuItem.ItemTemplate时出现错误。鼠标悬停在子菜单上时的颜色会让用户误解,他们可以单击来选择菜单,但即使它高亮显示,也不能适用于所有区域。看到图片了吗

然后我使用了这个代码,它对我来说很好

<ContextMenu>
    <MenuItem Header="Add to" ItemsSource="{Binding MyItems}" 
              DisplayMemberPath="{Binding ItemName}">
       <MenuItem.ItemContainerStyle>
           <Style>
              <EventSetter Event="MenuItem.Click" Handler="Menu_Click"/>
           </Style>
        </MenuItem.ItemContainerStyle>
    </MenuItem>
    <MenuItem Header="Remove from All" />
</ContextMenu>