WPF将不同的命令绑定到按钮/菜单项

本文关键字:按钮 菜单项 绑定 命令 WPF | 更新日期: 2023-09-27 18:20:38

我想征求你的意见。

我正在处理的应用程序有一个docking control,应该支持处理不同的"文档"。因此,可以同时打开多个windows(选项卡)。

每个都可以承载不同的内容。我提到的"文档"可能是一个文本文件,excel样式表或该应用程序正在开发的主控件(地理数据可视化)。

我使用的是MVVM模式和MVVM Light库。注意:我有第三方控制excel电子表格。

现在我有了menu bartoolbar,其中我有常见的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_。

然而,我不知道如何启用/禁用保存按钮/菜单项,也不知道如何实现不同的剪切/复制/粘贴功能。

我为问题太长而道歉。也许我可以问:

"如何根据应用程序的哪个部分被选中/激活,将不同的剪切/复制/粘贴命令绑定到按钮?"。

但我觉得,我正在努力实现的目标的附加背景将有助于回答这个问题。

WPF将不同的命令绑定到按钮/菜单项

并且SaveFile()方法会在所选选项卡的datacontext(它将是根据"文档"类型)。

SaveFile应在不返回视图的情况下由ViewModel实现。

创建多个ViewModel来表示不同类型的文档,并让每个ViewModel实现其"保存"功能。

View可以使用命令的CanExecute方法来决定是否应启用菜单项或按钮。您所需要的只是在ViewModel中实现CanExecute方法。在大多数情况下,Save命令的CanExecute将使用IsDirty或类似的属性。

编辑

对于应该具有上下文/活动选项卡项意识的菜单项,您可以使用菜单命令和ViewModel集合(每个选项卡项一个)创建一个主ViewModel

在上下文感知菜单项的命令处理程序中,获取活动ViewModel并传递命令。

若要获取当前TabItem,请将SelectedItem绑定到主ViewModel的属性(该属性的类型可以是ViewModel的基类)。

这样,您就不需要返回视图来获取当前选项卡项。