【发布时间】:2011-08-01 18:30:54
【问题描述】:
我有一个 GridView,它有几列都绑定到我的 ViewModel 层中的数据结构,所以我想做的是
- 有一个上下文菜单,当用户单击 GridView 中的某一行数据时会弹出该菜单(到目前为止,我只能在单击我放置的列的标题时显示上下文菜单开启。
- 让上下文菜单的内容根据用户单击的当前行的内容而有所不同。
有什么建议吗?谢谢
【问题讨论】:
标签: wpf templates gridview mvvm contextmenu
我有一个 GridView,它有几列都绑定到我的 ViewModel 层中的数据结构,所以我想做的是
有什么建议吗?谢谢
【问题讨论】:
标签: wpf templates gridview mvvm contextmenu
您可以在ItemContainerStyle 中设置ContextMenu,使其依赖于您可以使用一些DataTriggers 的行。
编辑:如果您决定在某个条件下换出整个 ContextMenu,则结构应采用以下形式:
<Style TargetType="{x:Type ListViewItem}">
<Style.Resources>
<ContextMenu x:Key="DefaultMenu">
<!-- Rest of menu here -->
</ContextMenu>
<ContextMenu x:Key="NonDefaultMenu">
<!-- Rest of menu here -->
</ContextMenu>
</Style.Resources>
<Style.Triggers>
<DataTrigger Binding="{Binding SomeProperty}" Value="SomeValue">
<Setter Property="ContextMenu" Value="{StaticResource NonDefaultMenu}"/>
</DataTrigger>
</Style.Triggers>
<Setter Property="ContextMenu" Value="{StaticResource DefaultMenu}"/>
</Style>
您通常也可以在适当的位置定义 ContextMenu,但如果您添加事件处理程序,它会出现错误,语法将是:
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<!-- Rest of menu here -->
</ContextMenu>
</Setter.Value>
</Setter>
【讨论】: