跟进this问题及其答案(确实解决了我的问题),我有几个问题:
ViewModelManager
以传递给RequeryAllTheThings
的构造函数?目前,我在加载的第一个视图模型中使用ViewModelBase.ViewModelManager
属性,但这看起来不太优雅。我尝试使用ServiceLocator
,但它返回的对象从未管理任何视图模型。DataGrid
中的控件发生更改状态时,我需要使用CanExecute方法触发我的命令。什么是正确的方法?答案 0 :(得分:1)
IViewModelManager已在ServiceLocator中注册。使用TypeFactory(它将自动解析ServiceLocator中的依赖关系)来构造需要IViewModelFactory的类型。
正确的方法是仅在必要时使命令状态无效。 CommandManager.RequerySuggested几乎使任何路由命令(鼠标移动,键盘等)无效。虽然这可能会对您的英特尔酷睿i7超级动力CPU产生很大影响,但世界上仍有人在运行速度较慢的机器。所以Catel试图找到最好的#34;开箱即用的#34;经验可能,即如果视图模型上的属性发生更改(通常是命令状态失效的原因),则会使状态无效。
您可以创建自己的观察程序来监听相关的DG事件,并在发生此类事件时使命令无效。