c# - Prism MVVM ObservesCanExecute - 我如何嵌套(逻辑与)简单的可观察属性
问题描述
我对 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
解决方案
您将希望在此处使用 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。
推荐阅读
- sql - VBA 函数在 sql 查询中不起作用:查询中的未定义函数
- listview - 滚动 Flutter 时 ListView 中的小部件丢失状态
- ios - 我怎样才能“clipToBottomBounds”?
- html - 尽管分配了百分比宽度,IMG 仍会生成滚动条
- python - Pandas 功能太慢 - 使用 dict/numpy 进行优化?
- html - 一些 CSS 问题
- python - 带有 Theano 后端的 Keras:自定义损失函数
- python - 如何使用二进制搜索来查找泡菜对象属性
- mysql - 如何在node.js中从mysql获取数据
- bing-search - 我们如何使用 Bing Ads API 在 Bing 搜索 API 的结果页面上提供广告?