wpf - 防止 WPF CommandManager 执行 CanExecute

标签 wpf

是否可以阻止 WPF CommandManager 执行它附加的 CanExecute 委托(delegate)?

我有一个未处理的异常处理例程,它为用户显示一个错误窗口。我现在遇到的情况是,异常作为 CanExecute 链的一部分被抛出。这将调用显示窗口的异常处理程序。此时,CommandManager 启动并重新查询 CanExecute,抛出另一个异常,调用处理程序,显示另一个窗口,重新查询 CanExecute,抛出另一个异常......等等。

我需要以某种方式阻止 CanExecute 的重新运行。我试图简单地忽略处理程序中的后续错误,但这意味着错误窗口中的异常信息是空白的。

最佳答案

最好的资源是从 ICommand Interface 中查找的其中有 CanExecuteChanged Event .订阅该事件的操作将被通知禁用自身。

目前尚不清楚您的结构是如何设置的,但我推测发起操作可能会在启动进程时触发此事件,然后在完成后再次触发事件以宣布已处理的其他命令可以运行。

示例发起命令操作以通知其他人在打开他们的命令之前检查状态:

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.
}

关于wpf - 防止 WPF CommandManager 执行 CanExecute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4053138/

相关文章:

wpf - 有两个控件设置另一个控件的可见性

wpf - 如何在WPF中的ListBox中编写 "Selection Changing"事件?

c# - ClickOnce 需要 System.Windows.Interactivity 版本 4.5.0.0

c# - 上下文菜单中的命令不起作用

WPF通过子容器滚动父容器

c# - 在后台操作中间显示模态 UI 并继续

wpf - 如何更改子控件xaml的背景颜色

wpf - 动画时网格列更改宽度

c# - .NET Core 3.1 WebBrowserControl在导航后读取html

c# - WPF前要不要学Window Form?