移动到Catel 4.x后,CanExecute方法不会触发

时间:2016-04-20 17:19:36

标签: wpf mvvm catel

跟进this问题及其答案(确实解决了我的问题),我有几个问题:

  1. 我在哪里检索ViewModelManager以传递给RequeryAllTheThings的构造函数?目前,我在加载的第一个视图模型中使用ViewModelBase.ViewModelManager属性,但这看起来不太优雅。我尝试使用ServiceLocator,但它返回的对象从未管理任何视图模型。
  2. 答案意味着有一种方法会表现更好,但我无法在文档中或在SO上找到它。具体来说,当DataGrid中的控件发生更改状态时,我需要使用CanExecute方法触发我的命令。什么是正确的方法?

1 个答案:

答案 0 :(得分:1)

  1. IViewModelManager已在ServiceLocator中注册。使用TypeFactory(它将自动解析ServiceLocator中的依赖关系)来构造需要IViewModelFactory的类型。

  2. 正确的方法是仅在必要时使命令状态无效。 CommandManager.RequerySuggested几乎使任何路由命令(鼠标移动,键盘等)无效。虽然这可能会对您的英特尔酷睿i7超级动力CPU产生很大影响,但世界上仍有人在运行速度较慢的机器。所以Catel试图找到最好的#34;开箱即用的#34;经验可能,即如果视图模型上的属性发生更改(通常是命令状态失效的原因),则会使状态无效。

  3. 您可以创建自己的观察程序来监听相关的DG事件,并在发生此类事件时使命令无效。