Prism MVVM ObservsCanExecute-如何嵌套(逻辑及以上)简单的可观察属性

时间:2020-01-18 20:21:50

标签: c# wpf mvvm prism

我对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,就启用了按钮(附加到此命令),而没有选中BoolOneBoolTwo。如何获得类似命令谓词return BoolOne && BoolTwo && BoolThree

的行为

1 个答案:

答案 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。