2010-10-29 49 views
3

是否有可能阻止WPF CommandManager執行連接CanExecute委託?防止WPF CommandManager執行CanExecute

我有一個未處理的異常處理程序例程,顯示用戶的錯誤窗口。在CanExecute鏈的一部分引發異常的情況下,我有一種情況。這會調用顯示窗口的異常處理程序。此時,CommandManager會踢入並重新調用CanExecute,拋出另一個異常,調用處理程序,顯示另一個窗口,重新調用CanExecute,拋出另一個異常等等等等等等等等。

我需要防止重新運行的CanExecute。我試圖簡單地忽略處理程序中的後續錯誤,但這意味着錯誤窗口中的異常信息是空白的。

+0

有你有你的命令'CanExecuteChanged'事件手動鏈接到'CommandManager.RequerySuggested'事件? – 2010-10-29 15:31:03

+0

我正在使用Cinch框架,其中包含一個SimpleCommand類,它按照Josh Smith的實現在此執行此操作:http://joshsmithonwpf.wordpress.com/2008/06/17/allowing-commandmanager-to-query-your- icommand-objects/ – Darren 2010-10-29 16:02:47

+0

考慮使用不同的命令實現。如果您有興趣,請嘗試PerrypheralFramework.WPF。這意味着使用框架的ViewModelBase進行工作。當一個屬性被改變時,或者當你要求一個視圖模型使用一個視圖模型方法爲它內部的所有命令引發事件時,查詢這些命令。 – 2014-11-02 23:53:50

回答

0

最好的資源是關注是從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. 
}