0

我想请教您的意见。

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

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

我正在使用MVVM模式和 MVVM Light 库。注意:我对 Excel 电子表格有第三方控件。

现在我有一个menu bar和一个toolbar我有共同menuitems(in menubar)/按钮(in toolbar)的地方,比如“保存”、“剪切”、“复制”等......当您在选项卡之间切换时,“保存”按钮应该调用适当的保存功能。

剪切/复制/粘贴也是如此:

  • 在带有文本文档的选项卡中 - 剪切/复制/粘贴应该对文本进行操作(为此有 wpf 内置命令)。

  • 在主控件中时 - 它应该与图形元素一起使用(我将不得不实现这些)

  • 在电子表格中时 - 它应该与电子表格控件的随附第三方命令一起使用。

此外,可以有一个选项卡选择了一些文本 - 因此当切换到此选项卡时应该启用用于剪切/复制的菜单项/按钮,而其他一些选项卡没有选择图形元素,因此用于剪切/复制的菜单项/按钮应该切换到此选项卡时被禁用。

通过保存command,我可以想象一种可能的方法,但我仍然不确定这是否是实现它的好方法:RelayCommand在 MainWindowViewModel 中有一个

public ICommand SaveCommand
{
    get
    {
        if (_saveCommand == null)
        {
            _saveCommand = new RelayCommand(() => this.SaveFile());
        }
        return _saveCommand;
    }
}

并且该SaveFile()方法将调用选项卡上的其他一些“保存方法” datacontextselected这将是相应“文档”类型的视图模型)。

但是我不知道如何启用/禁用保存按钮/菜单项,而且我对如何实现不同的剪切/复制/粘贴功能一无所知。

我为问题的长度道歉。也许我可以问:

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

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

4

1 回答 1

2

并且 SaveFile() 方法将在所选选项卡的数据上下文上调用其他一些“保存方法”(这将是相应“文档”类型的视图模型)。

SaveFile 应该由 ViewModel 实现,而不需要返回到 View。

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

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

编辑

对于应该是上下文/活动选项卡项的菜单项,您可以创建一个主视图模型,其中包含菜单命令和一组视图模型(每个选项卡项一个)

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

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

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

于 2013-07-01T14:27:09.193 回答