首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >WPF MenuItem ViewModel命令

WPF MenuItem ViewModel命令
EN

Stack Overflow用户
提问于 2010-04-30 20:39:28
回答 1查看 8.4K关注 0票数 3

我是WPF的新手,正在为一个场景而苦苦挣扎。我有一个菜单,里面有菜单项。当这些菜单项之一被单击时,需要调用一个方法,该方法将根据显示的与该菜单项相关联的文本执行某些操作。例如,菜单项的内容是"test“,所以我需要用"test”做一些事情。仅供参考,这个“东西”直接影响ViewModel上的集合。

使用click事件和没有MVVM很容易实现这一点,但我尝试使用显式ViewModel实现ViewModel。因此,我开始研究命令,但看不到如何将视图中的任何内容传递回ViewModel中的命令。

对我应该在这里做什么有什么建议吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-30 21:40:21

假设你有一个项目集合来驱动命令,我建议使用类似于Will的第二个建议的东西,如下所示:

代码语言:javascript
复制
<MenuItem
  Command="{Binding MenuCommand}"
  CommandParameter="{Binding}"
  Header="{Binding DisplayText}" />

在ViewModel端,您可以使用DelegateCommand或RelayCommand来挂接处理程序方法。这允许您检查菜单项的数据,并根据其中的内容执行所需的任何操作。

代码语言:javascript
复制
public DelegateCommand<MyMenuObject> MenuCommand { get; private set; }

public ViewModel()
{
    MenuCommand = new DelegateCommand<MyMenuObject>(MenuCommandExecuted);
}

public void MenuCommandExecuted(MyMenuObject parameter)
{
    // do something based on the parameter object
}

您还需要将MenuCommand传递到集合项的ICommand属性中,以使用上面的简单绑定表单,或者将命令绑定更改为使用类似RelativeSource FindAncestor的内容来查找指向父DataContext (ViewModel)的树以查找MenuCommand。使用这种方法使您可以灵活地在集合中添加或删除项,并且不需要进行任何UI更改即可支持新的项集。

Prism DelegateCommand

RelayCommand

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2744525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档