Wpf Prism:必须显式调用RaiseCanceTechChanged()

Wpf Prism:必须显式调用RaiseCanceTechChanged(),wpf,mvvm,prism,delegatecommand,Wpf,Mvvm,Prism,Delegatecommand,下面是一个非常简单的Prism.Wpf示例,其中包含一个DelegateCommand,它同时具有Execute和CanExecute委托 假设CanExecute依赖于某些属性。Prism的DelegateCommand似乎不像RelayCommand在其他MVVM框架中那样,在该属性更改时自动重新计算CanExecute条件。相反,您必须在属性设置器中显式调用RaiseCanExecuteChanged。这在任何非平凡的viewmodel中都会导致大量重复代码 有更好的办法吗 视图模型: 视

下面是一个非常简单的Prism.Wpf示例,其中包含一个DelegateCommand,它同时具有Execute和CanExecute委托

假设CanExecute依赖于某些属性。Prism的DelegateCommand似乎不像RelayCommand在其他MVVM框架中那样,在该属性更改时自动重新计算CanExecute条件。相反,您必须在属性设置器中显式调用RaiseCanExecuteChanged。这在任何非平凡的viewmodel中都会导致大量重复代码

有更好的办法吗

视图模型:

视图:


这是故意的。它与性能有关

不过,您可以使用自定义命令替换Prism DelegateCommand,该命令可以执行您想要的操作。实施似乎起到了作用。但是,我不建议使用它。如果有很多命令,很可能会遇到性能问题


还有,请看这个。

这是设计的。它与性能有关

不过,您可以使用自定义命令替换Prism DelegateCommand,该命令可以执行您想要的操作。实施似乎起到了作用。但是,我不建议使用它。如果有很多命令,很可能会遇到性能问题


另外,请参见此。

正如@l33t所解释的,这是通过设计实现的。如果希望DelegateCommand自动监视VM属性的更改,只需使用DelegateCommand的observeProperty方法:

var command = new DelegateCommand(Execute).ObservesProperty(()=> Name);

正如@l33t所解释的,这是通过设计实现的。如果希望DelegateCommand自动监视VM属性的更改,只需使用DelegateCommand的observeProperty方法:

var command = new DelegateCommand(Execute).ObservesProperty(()=> Name);

谢谢我还发现以下链接非常有用:和相关的感谢。我还发现以下链接非常有用:和相关的
var command = new DelegateCommand(Execute).ObservesProperty(()=> Name);