WPF将不同的命令绑定到按钮/菜单项
本文关键字:按钮 菜单项 绑定 命令 WPF | 更新日期: 2023-09-27 18:20:38
我想征求你的意见。
我正在处理的应用程序有一个docking control
,应该支持处理不同的"文档"。因此,可以同时打开多个windows
(选项卡)。
每个都可以承载不同的内容。我提到的"文档"可能是一个文本文件,excel样式表或该应用程序正在开发的主控件(地理数据可视化)。
我使用的是MVVM
模式和MVVM Light库。注意:我有第三方控制excel电子表格。
现在我有了menu bar
和toolbar
,其中我有常见的menuitems
(在menubar
中)/按钮(在toolbar
中),如"保存"、"剪切"、"复制"等。当您在选项卡之间切换时,"保存"按钮应调用相应的保存功能。
剪切/复制/粘贴也是如此:
-
当在带有文本文档的选项卡中时,剪切/复制/粘贴应该与文本一起操作(为此有wpf内置命令)。
-
当在主控件中时-它应该与图形元素一起工作(我必须实现这些)
-
当在电子表格中时-它应该与电子表格控件的随附第三方命令一起使用。
此外,可以有一个选项卡选择了一些文本-因此,当切换到该选项卡时,剪切/复制的菜单项/按钮应该启用,而其他一些选项卡没有选择图形元素,因此,当转换到该选项卡后,剪切/复制的菜单项或按钮应该禁用。
有了保存command
,我可以想象一种可能的方法来实现它,但我仍然不确定这是否是一种好的实现方法:在MainWindowViewModel 中有一个RelayCommand
public ICommand SaveCommand
{
get
{
if (_saveCommand == null)
{
_saveCommand = new RelayCommand(() => this.SaveFile());
}
return _saveCommand;
}
}
并且CCD_ 11方法将调用CCD_ 13选项卡的CCD_。
然而,我不知道如何启用/禁用保存按钮/菜单项,也不知道如何实现不同的剪切/复制/粘贴功能。
我为问题太长而道歉。也许我可以问:
"如何根据应用程序的哪个部分被选中/激活,将不同的剪切/复制/粘贴命令绑定到按钮?"。
但我觉得,我正在努力实现的目标的附加背景将有助于回答这个问题。
并且SaveFile()方法会在所选选项卡的datacontext(它将是根据"文档"类型)。
SaveFile应在不返回视图的情况下由ViewModel实现。
创建多个ViewModel来表示不同类型的文档,并让每个ViewModel实现其"保存"功能。
View可以使用命令的CanExecute方法来决定是否应启用菜单项或按钮。您所需要的只是在ViewModel中实现CanExecute方法。在大多数情况下,Save命令的CanExecute将使用IsDirty或类似的属性。
编辑
对于应该具有上下文/活动选项卡项意识的菜单项,您可以使用菜单命令和ViewModel集合(每个选项卡项一个)创建一个主ViewModel
在上下文感知菜单项的命令处理程序中,获取活动ViewModel并传递命令。
若要获取当前TabItem,请将SelectedItem绑定到主ViewModel的属性(该属性的类型可以是ViewModel的基类)。
这样,您就不需要返回视图来获取当前选项卡项。