Prism MVVM ObservesCanExecute - 我如何嵌套(逻辑 AND Over)简单的可观察属性

Prism MVVM ObservesCanExecute - How Do I Nest (Logical AND Over) Simple Observable Properties

我是 Prism 的新手,我无法弄清楚如何利用 ObservesCanExecute(这让我不必手动要求命令重新计算)与多个属性。使用单个 属性,这就像一个魅力!但我想对我的所有三个属性执行 "and"。

代码如下:

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

您需要在此处使用 ObservesProperty 而不是 ObservesCanExecute。 https://prismlibrary.com/docs/commanding.html

Do not attempt to chain-register ObservesCanExecute methods. Only one property can be observed for the CanExcute delegate.

You can chain-register multiple properties for observation when using the ObservesProperty method. Example: ObservesProperty(() => IsEnabled).ObservesProperty(() => CanSave).

因此您需要将代码更改为:

MyCommand = new DelegateCommand(MyCommandHandler, MyCanExecuteMethod).ObservesProperty(() => BoolOne).ObservesProperty(() => BoolTwo).ObservesProperty(() => BoolThree);

private void MyCanExecuteMethod()
{
    return BoolOne && BoolTwo && BoolThree;
}

这样,当这些属性中的任何一个发生变化时,都会触发 RaiseCanExecuteChanged。