我正在使用MVVM来开发我的WPF应用程序,现在我想在用户右键单击某个内容时显示生成的上下文菜单。
将右键单击路由到某个操作很容易,但是如何显示由ViewModel生成的上下文菜单呢?
由于在MVVM中没有直接访问视图,所以我甚至不知道从哪里开始显示上下文菜单。
我正在使用MVVM来开发我的WPF应用程序,现在我想在用户右键单击某个内容时显示生成的上下文菜单。
将右键单击路由到某个操作很容易,但是如何显示由ViewModel生成的上下文菜单呢?
由于在MVVM中没有直接访问视图,所以我甚至不知道从哪里开始显示上下文菜单。
<y:DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Name="cmNewSales" Foreground="Black" Command={Binding Path=MyCommand}/>
</ContextMenu>
</y:DataGrid.ContextMenu>
其中MyCommand是ViewModel公开的Command属性,或在ViewModel中创建一个命令ObservableCollection,将其公开并绑定到ContextMenu的ItemSource属性。
希望这可以帮助您。
抱歉回复晚了,我必须进行一些实验才能让它正常工作。请试用以下代码。我只是设置了自己的垃圾数据源,以便显示某种数据。它仅在我右键单击第一列标题时显示,而不是其他任何地方...这应该是你想要的,对吧?让我知道你的进展如何...如果有任何问题,我会继续思考。
<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>
我的初步想法是在VM中有一个命令列表(对应于上下文菜单中的项目)。将ContextMenu的ItemSource绑定到VM.ListOfCommands。根据个人喜好使用样式。
以下是同样思路的示例... http://www.julmar.com/blog/mark/2009/04/21/UsingMVVMWithMenusInWPF.aspx