gpt4 book ai didi

wpf - MVVM 命令的编程重新评估 "can execute"状态

转载 作者:行者123 更新时间:2023-12-04 03:02:37 26 4
gpt4 key购买 nike

我正在使用 MVVM 模式编写 WPF 应用程序,基于以下文章:WPF Apps With The Model-View-ViewModel Design Pattern

我的 View 上有两个按钮,按钮的“Command”属性绑定(bind)(带有数据绑定(bind))到 RelayCommand 类的给定实例(请参见上面文章中的“图 3 RelayCommand 类”)。 RelayCommand 类支持检查给定命令是否可以执行。

WPF 会自动禁用无法执行命令的按钮。

我的每个命令(在 ViewModel 类中)都会启动后台操作,并且在后台操作完成之前无法再次执行该命令。 RelayCommand 实例具有后台操作是否仍在工作或已完成的信息。

我的问题如下:按下任何按钮后,按钮会自动禁用(这没关系),因为后台操作开始并且命令在完成之前无法执行,但是在操作完成后,按钮不会'不会自动启用,因为他们的命令的“可以执行”谓词不会自动重新评估。重新评估可以通过让应用程序松动并重新获得焦点(通过按 ALT+TAB)来手动触发。完成此技巧后,按钮再次启用。

如何以编程方式重新评估按钮命令的“可以执行”状态?

最佳答案

您可以在 CommandManager 上调用 InvalidateRequerySuggested 来通知应该重新查询 CanExecute:

CommandManager.InvalidateRequerySuggested();

http://msdn.microsoft.com/en-us/library/system.windows.input.commandmanager.invalidaterequerysuggested.aspx

这确实取决于特定的 ICommand 实现是否正确实现了 ICommand.CanExecuteChanged 模式,因此 YMMV。

更新

例如,我使用 Prism,它有自己的基本实现 ICommand:DelegateCommand。我发现在 Prism 中的 DelegateCommand 上调用 RaiseCanExecuteChanged() 对我有用。

更新 2

并确保您在 UI 线程上调用 InvalidateRequerySuggested()。如有必要,请使用 Dispatcher 进行调用。

关于wpf - MVVM 命令的编程重新评估 "can execute"状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2984785/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com