我在我的应用程序中遇到了MVVM的问题。我有一个TabControl,每个选项卡都托管一个控件,允许以某种方式编辑文件,例如文本文件或图像。每个控件都绑定到来自ViewModel区域的类(如图所示)。我还有RoutedUICommands之一是WordWrap,仅在文本文件的情况下才有意义。此命令在MenuItem或Button等中使用。我希望仅在文本控件是此命令的目标时才启用它。如何根据MVVM正确地执行此操作?
更多细节:
一个菜单项被这样使用:
更多细节:
窗口的 XAML 包含:
<Window.CommandBindings>
<CommandBinding Command="local:EditorCommands.WordWrap"
Executed="WordWrapExecuted"
CanExecute="CommandCanBeExecutedWhenAnythingIsOpen"/>
</Window.CommandBindings>
一个菜单项被这样使用:
<MenuItem Command="local:EditorCommands.WordWrap"/>
首先是Executed和CanExecute事件处理程序:它们在Window类中,尽管我对MVVM的理解是,逻辑应该仅存在于ViewModel中。
此外,这些函数中的sender是窗口实例。为什么它不是命令的目标?
我应该为每个命令编写自己的RoutedUICommand继承者吗?