ContextMenu中的XAML和绑定子菜单项?

时间:2011-07-03 21:56:11

标签: wpf xaml wpf-controls

我在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工具包。

2 个答案:

答案 0 :(得分:6)

猜猜我应该尝试更多。事实证明这相对简单:

<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>

答案 1 :(得分:3)

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

enter image description here

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

<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>