繁体   English   中英

ICommand.CanExecute async

[英]ICommand.CanExecute async

我有一个Command,检查CanExecute需要很长时间。 现在,我问我,是否可以运行CanExecute异步方法?

嗯有可能。 您应该使用CanExecutedChanged 在后台进行持久检查(可以使用BackgroundWorker ),如果可以执行或不执行,则存储结果,触发事件并返回CanExecute的缓存值。

不,你不能直接异步运行它。 您也不应该知道绑定子系统何时会调用它。

没有什么可以阻止你从该函数中启动后台线程,但说实话,这没什么意义。 如果你的CanExecute代码需要很长时间才能执行,那么你真的需要重新评估你在做什么,这是否意味着重做代码,或重做UI以消除对CanExecute的依赖。

如果您使用PrismDelegateCommand <T> ,您可以强制选择绑定到命令的任何内容来重新评估CanExecute。 这可以通过在命令上调用RaiseCanExecuteChanged()函数来完成。 如果你有一个后台线程运行,必要时调用它,它应该以你想要的方式运行。

CanExecute必须在GUI线程上运行。

但您可以自己实现:

使用从Thread更新的Boolean属性。 设置后,还要调用NotifyPropertyChanged(对于Command)。

最好将此属性默认为false,但这取决于您的域逻辑。

使用ICommand实现,检查CanExecute是纯可选的 ,使用CanExecute的唯一真正好处是绑定到命令的某些UI控件可以监听CanExecuteChanged事件并启用/禁用它们自己。 有很多方法可以实现这一目标。

您不必仅为了遵守约定而使用CanExecute。 为什么你不能在一个单独的线程中开始你的长期破坏验证,以避免UI挂起并在最后执行操作?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM