WPF MVVM:如何创建&显示上下文菜单?

时间:2010-07-20 08:32:52

标签: wpf mvvm contextmenu

对于我的WPF应用程序,我正在使用MVVM,现在我想在用户右键单击某些内容时显示生成的上下文菜单。
路由右键单击某个操作很简单,但如何显示上下文菜单ViewModel生成哪些项?

我甚至不知道从哪里开始显示上下文菜单,因为我没有直接访问MVVM中的视图。

3 个答案:

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