【发布时间】:2013-07-01 13:20:48
【问题描述】:
我想请教您的意见。
我正在处理的应用程序有一个docking control,应该支持使用不同的“文档”。因此可以同时打开多个windows(tabs)。
每个都可以承载不同的内容。我提到的“文件”可能是一个文本文件, 正在开发此应用程序的 Excel 样式表或主控件(地理数据可视化)。
我正在使用MVVM 模式和 MVVM Light 库。注意:我有 Excel 电子表格的第三方控件。
现在我有一个menu bar 和一个toolbar,其中我有常见的menuitems(在menubar)/按钮(在toolbar),如“保存”、“剪切”、“复制”等。 .. 在选项卡之间切换时,“保存”按钮应调用适当的保存功能。
剪切/复制/粘贴也是如此:
在带有文本文档的选项卡中 - 剪切/复制/粘贴应该对文本进行操作(为此有 wpf 内置命令)。
在主控件中 - 它应该与图形元素一起使用(我必须实现这些)
在电子表格中时 - 它应该与电子表格控件的随附第三方命令一起使用。
此外,可以有一个选项卡选择了一些文本 - 因此切换到此选项卡时应该启用用于剪切/复制的菜单项/按钮,而其他一些选项卡没有选择图形元素,因此用于剪切的菜单项/按钮切换到此选项卡时应禁用 /copy。
通过保存command,我可以想象一种可能的方法,但我仍然不确定这是否是实现它的好方法:在 MainWindowViewModel 中有一个RelayCommand
public ICommand SaveCommand
{
get
{
if (_saveCommand == null)
{
_saveCommand = new RelayCommand(() => this.SaveFile());
}
return _saveCommand;
}
}
并且SaveFile() 方法会在selected 选项卡的datacontext 上调用其他一些“保存方法”(这将是相应“文档”类型的视图模型)。
但是我不知道如何启用/禁用保存按钮/菜单项,而且我对如何实现不同的剪切/复制/粘贴功能一无所知。
对于问题的长度,我深表歉意。也许我可以问:
“如何根据选择/激活应用程序的哪个部分将不同的剪切/复制/粘贴命令绑定到按钮?”。
但我觉得我正在努力实现的附加背景将有助于回答这个问题。
【问题讨论】:
-
我会让 MainViewModel 拥有其他视图模型的集合,并为当前选定的视图模型添加一个属性。然后保存命令只是将调用转发到当前选定的视图模型保存命令/方法。
标签: c# wpf mvvm binding command