防止 WPF CommandManager 执行 CanExecute

3

有没有办法防止WPF CommandManager执行其附加的CanExecute委托?

我有一个未处理异常处理程序,用于为用户显示错误窗口。目前我遇到了这样一种情况:作为CanExecute链的一部分抛出异常。这将调用异常处理程序,显示窗口。此时,CommandManager启动并重新查询CanExecute,抛出另一个异常,调用处理程序,显示另一个窗口,重新查询CanExecute,抛出另一个异常...等等。

我需要防止CanExecute的这种重复运行。我曾经尝试忽略处理程序中的后续错误,但这意味着错误窗口中的异常信息为空。


你是否曾经不得不手动将你的命令 CanExecuteChanged 事件链接到 CommandManager.RequerySuggested 事件? - Steve Greatrex
我正在使用Cinch框架,其中包括一个SimpleCommand类,根据Josh Smith在这里的实现来完成这个功能:http://joshsmithonwpf.wordpress.com/2008/06/17/allowing-commandmanager-to-query-your-icommand-objects/ - Darren
考虑使用不同的命令实现。如果您有兴趣,请尝试使用PerrypheralFramework.WPF。这意味着使用框架的ViewModelBase才能正常工作。当属性更改或者您要求视图模型使用一个视图模型方法来触发其中所有命令时,将查询命令。 - Eyal Perry
1个回答

0

最佳的资源是查看 ICommand 接口,其中包含 CanExecuteChanged 事件。订阅该事件的操作将被通知以禁用自身。

不清楚您的结构设置如何,但我推测起始操作可以在启动过程中触发此事件,然后在完成时再次触发该事件,以宣布其他命令可运行。

示例:起始命令操作通知其他人在启动他们的命令之前检查状态:

private void DoTheCommand()
{
    _isProcessingCabExecute = false;       // Turn off all related for this 
                                           // command (is Execute).

    _opCommand.RaiseCanExecuteChanged();   // Inform all subscribed to check status 
                                           // and disable where possible.

    // The operation

    _isProcessingCabExecute = true;        // All done turn it back on
    _opCommand.RaiseCanExecuteChanged(); // Resume operations.
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接