我是WPF的新手,正在为一个场景而苦苦挣扎。我有一个菜单,里面有菜单项。当这些菜单项之一被单击时,需要调用一个方法,该方法将根据显示的与该菜单项相关联的文本执行某些操作。例如,菜单项的内容是"test“,所以我需要用"test”做一些事情。仅供参考,这个“东西”直接影响ViewModel上的集合。
使用click事件和没有MVVM很容易实现这一点,但我尝试使用显式ViewModel实现ViewModel。因此,我开始研究命令,但看不到如何将视图中的任何内容传递回ViewModel中的命令。
对我应该在这里做什么有什么建议吗?
谢谢
发布于 2010-04-30 21:40:21
假设你有一个项目集合来驱动命令,我建议使用类似于Will的第二个建议的东西,如下所示:
<MenuItem
Command="{Binding MenuCommand}"
CommandParameter="{Binding}"
Header="{Binding DisplayText}" />
在ViewModel端,您可以使用DelegateCommand或RelayCommand来挂接处理程序方法。这允许您检查菜单项的数据,并根据其中的内容执行所需的任何操作。
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更改即可支持新的项集。
https://stackoverflow.com/questions/2744525
复制相似问题