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,按钮(附加到此命令)将在不检查 BoolOne
和 BoolTwo
的情况下启用。我怎样才能让它也像命令谓词一样运行 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。
我是 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,按钮(附加到此命令)将在不检查 BoolOne
和 BoolTwo
的情况下启用。我怎样才能让它也像命令谓词一样运行 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。