我正在对WPF和MVVM进行一些研究,以评估这是我们希望在项目中实现的事情。处理应用程序范围命令
有一件事情我不明白(我的WPF书还没有到)。
我读过Josh Smith的文章'Model-View-ViewModel Design Pattern中的WPF应用程序'以及他的文章'在WPF中使用ViewModel中的RoutedCommands'。
我的演示应用程序与Josh Smith的演示程序稍有不同,因为我的菜单项不直接绑定到主视图模型,而是由其他视图模型处理。
我的主窗口绑定到一个MainViewModel对象,该对象公开一个名为View的对象(从ViewModelBase类派生并通过ContentControl绑定到主窗口)。这个View对象被替换为不同的ViewModel,比如CustomerViewModel,CustomersViewModel等等(这些都是使用我的资源字典中定义的视图呈现的:)。
所有这一切都很好找,但由于我不想在我的主窗口(如新建,保存等)中启用应该启用的项目,根据视图禁用,我在CommandSink上找到了Josh Smith的文章模式(?),但他表示它已经过时,而应该使用RelayCommand。
现在我很困惑,因为我无法弄清楚如何使用这种方法来实现这个功能。
感谢, 文森特
谢谢您的回复。这与我如何使用与当前活动视图紧密耦合的命令来做到这一点接近,并且您的示例是我如何认为应使用RelayCommand。它并没有'禁用'视图不处理的命令,这是我的目标 - 而是列出了视图可以处理的每个命令。 – Vincent 2010-12-18 10:14:54
感谢您的回复。您所描述的方法与我在WinForms应用程序中执行的方式非常相似。它给菜单系统提供了更多的控制。我想我认为所有这一切都可以使用XAML :) – Vincent 2010-12-19 09:47:38
再次嗨。我正在努力做出一个好的解决方案,我不确定我还在那里。在你的代码示例中,你检查一个CustomerView。您可能指的是CustomerViewModel,但除此之外。这种方法需要对每个支持Save命令的ViewModel进行转换。目前我正在尝试使用CommandSink(Josh Smith)来完成这项工作,但由于它'已过时',所以我不确定... – Vincent 2010-12-20 21:05:58