首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF CanExecute不断查询

WPF CanExecute不断查询
EN

Stack Overflow用户
提问于 2013-06-19 02:20:08
回答 1查看 1.1K关注 0票数 1

我在ViewModel中有一个属性IEnumerable<MyObject> MyObjects。我希望第二个视图模型(引用第一个)中的某个命令在MyObjects中填充了至少一个对象时是可执行的,但当它为空时就不是可执行的了。

我的CanExecute方法看起来像这样:

代码语言:javascript
复制
private bool CanExecute()
{
    return this.viewModel.MyObjects.Any();
}

我有一个PropertyChanged事件,每当MyObjects的基础值发生更改时都会引发该事件。

逻辑工作正常,但是CanExecute()方法经常被调用--调用次数如此之多,以至于基本上冻结了整个应用程序。同时,MyObjects没有改变(我也没有为它引发PropertyChanged事件)。你知道怎样才能避免不断地重新查询CanExecute吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-19 02:51:11

我假设你的命令要么继承了RoutedCommand,要么像这样实现了CanExecuteChanged

代码语言:javascript
复制
public event EventHandler CanExecuteChanged {
    add { CommandManager.RequerySuggested += value; }
    remove { CommandManager.RequerySuggested -= value; }
}

这意味着向命令的CanExecuteChanged ( WPF会决定何时调用CanExecute)添加一个处理程序相当于将其添加到CommandManager.RequerySuggested中,这是经常引发的,据我所知,没有办法强制它不那么频繁地被引发。

有两种方法可以解决这个问题:

  1. 根本不使用RequerySuggested,只需使CanExecuteChanged成为一个标准事件,并在您需要它的时候明确地引发它,以确保CanExecute方法非常快,所以它运行的频率并不重要。您可以将其编写为return this.viewModel.HasAnyObjects;,其中HasAnyObjects是一个简单的字段,当MyObjects更改时,该字段将设置为true或false。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17176092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档