.net WPF MenuItem ViewModel命令
我是WPF的新手,正在为一个场景而挣扎。我有一份菜单,上面有菜单项。单击其中一个菜单项时,需要调用一个方法,该方法将根据与该菜单项关联的显示文本执行某些操作。例如,菜单项的内容是“test”,所以我需要用“test”做一些事情。仅供参考,此“某物”直接影响ViewModel上的集合 使用click事件和no-ViewModel很容易实现,但我尝试使用显式ViewModel实现MVVM。因此,我开始研究命令,但看不到如何将任何内容从视图传递回ViewModel中的命令 对我应该在这里做什么有什么建议吗 谢谢你有两个选择.net WPF MenuItem ViewModel命令,.net,wpf,mvvm,.net,Wpf,Mvvm,我是WPF的新手,正在为一个场景而挣扎。我有一份菜单,上面有菜单项。单击其中一个菜单项时,需要调用一个方法,该方法将根据与该菜单项关联的显示文本执行某些操作。例如,菜单项的内容是“test”,所以我需要用“test”做一些事情。仅供参考,此“某物”直接影响ViewModel上的集合 使用click事件和no-ViewModel很容易实现,但我尝试使用显式ViewModel实现MVVM。因此,我开始研究命令,但看不到如何将任何内容从视图传递回ViewModel中的命令 对我应该在这里做什么有什么建
<MenuItem Command="{Binding MenuCommand}" CommandParameter="File">File</MenuItem>
文件
我认为第一个选项更好,因为它避免了神奇的字符串。鉴于你有一系列的物品驱动命令,我建议你使用类似于威尔第二个建议的东西,如下所示:
<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
}
public DelegateCommand MenuCommand{get;private set;}
公共视图模型()
{
MenuCommand=newdelegateCommand(MenuCommandExecuted);
}
public void menucommandexed(MyMenuObject参数)
{
//基于参数对象执行某些操作
}
您还需要将MenuCommand传递到集合项上的ICommand属性中,以使用上面的简单绑定表单,或者更改命令绑定以使用类似RelativeSource FindAncestor的内容,或者在树中查找MenuCommand的父级数据上下文(ViewModel)。使用这种方法,您可以灵活地从集合中添加或删除项,而无需进行任何UI更改以支持新的项集
好的,谢谢你的回复。我忘了提到菜单项显示的文本也绑定到ViewModel,即ObervableCollection。这当然排除了第二种可能性。我不确定我是否完全理解第一条?我创建了一个实现ICommand接口的命令,但是如何将包含的文本传递给该命令呢?再次感谢