对于我的WPF应用程序,我正在使用MVVM,现在我想在用户右键单击某些内容时显示生成的上下文菜单。
路由右键单击某个操作很简单,但如何显示上下文菜单ViewModel生成哪些项?
我甚至不知道从哪里开始显示上下文菜单,因为我没有直接访问MVVM中的视图。
答案 0 :(得分:3)
例如,如果您希望在可能显示销售额的DataGrid上显示ContextMenu,则可以执行以下操作:
<y:DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Name="cmNewSales" Foreground="Black" Command={Binding Path=MyCommand}/>
</ContextMenu>
</y:DataGrid.ContextMenu>
其中MyCommand是ViewModel公开的Command属性,或者在ViewModel中创建一个ObservableCollection命令,它们在ContextMenu的ItemSource属性中公开并绑定。
希望有所帮助
答案 1 :(得分:3)
对于回复延迟的道歉,必须进行一些实验才能使其发挥作用。给出以下代码。我只是设置了自己的垃圾数据源,所以我可以显示某种数据。它只显示我右键单击第一列标题而不是其他地方......我认为这是你想要的,对吧?让我知道你是如何继续...任何probs将继续思考。
<Grid>
<ListView Margin="8,8,33,12" ItemsSource="{Binding Source={StaticResource Stuff}, Path=MyCollection}">
<ListView.View>
<GridView>
<GridViewColumn Width="100" DisplayMemberBinding="{Binding}">
<GridViewColumnHeader>ProductName
<GridViewColumnHeader.ContextMenu>
<ContextMenu Name="MyMenu">
<MenuItem Header="Sort by..."/>
<MenuItem Header="Follow link..."/>
</ContextMenu>
</GridViewColumnHeader.ContextMenu>
</GridViewColumnHeader>
</GridViewColumn>
<GridViewColumn Width="100" Header="Product Name" DisplayMemberBinding="{Binding Path=Length}"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
答案 2 :(得分:0)
我头脑中的答案是在VM中有一个命令列表(对应于上下文菜单中的项目)。将ContextMenu的ItemSource绑定到VM.ListOfCommands。根据口味使用样式。
以下是同一行的例子...... http://www.julmar.com/blog/mark/2009/04/21/UsingMVVMWithMenusInWPF.aspx