我对Prism还是很陌生,并且在弄清楚如何利用ObservesCanExecute
(使我不必手动要求命令重新计算)与多个属性配合使用时遇到麻烦。具有单个属性,这就像一个魅力!但是我想对我的所有三个属性执行“与”操作。
代码如下:
public ViewModel()
{
MyCommand = new DelegateCommand(MyCommandHandler).ObservesCanExecute(() => BoolOne).ObservesCanExecute(() => BoolTwo).ObservesCanExecute(() => BoolThree);
}
private bool _boolOne;
public bool BoolOne
{
get => _boolOne;
set => SetProperty(ref _boolOne, value);
}
...
我遇到的是,一旦BoolThree
设置为true,就启用了按钮(附加到此命令),而没有选中BoolOne
和BoolTwo
。如何获得类似命令谓词return BoolOne && BoolTwo && BoolThree
答案 0 :(得分:2)
您将要在此处使用ObservesProperty而不是ObservesCanExecute。 https://prismlibrary.com/docs/commanding.html
请勿尝试对ObservesCanExecute方法进行链式注册。 CanExcute委托只能观察到一个属性。
使用ObservesProperty方法时,可以链式注册多个属性以进行观察。例如:ObservesProperty(()=> IsEnabled)。ObservesProperty(()=> CanSave)。
因此,您需要将代码更改为此:
MyCommand = new DelegateCommand(MyCommandHandler, MyCanExecuteMethod).ObservesProperty(() => BoolOne).ObservesProperty(() => BoolTwo).ObservesProperty(() => BoolThree);
private void MyCanExecuteMethod()
{
return BoolOne && BoolTwo && BoolThree;
}
这样,当这些属性中的任何一个更改时,都会触发RaiseCanExecuteChanged。