2017-02-20 68 views
1

我有一個RelayCommand,綁定到一個AppBarButton,如:收到COMException在RaiseCanExecuteChanged在UWP

Command="{Binding NextCommand, UpdateSourceTrigger=PropertyChanged}" 

命令的CanExecute屬性只是一個簡單的空檢查。

private bool CanExecuteNextCommand() => !(this.SelectedItem == null); 

但是,如果RaiseCanExecuteChanged被調用(通過觸發器)快速,多次,然後在這裏:

CanExecuteChanged?.Invoke(this, EventArgs.Empty); 

我得到以下異常:

「錯誤HRESULT E_FAIL已退還從調用COM組件。「

如果我從視圖中刪除Command屬性綁定,它會起作用。

我甚至嘗試在觸發器中提出CanExecuteChangeds之前添加一個Task.Delay(200),但我得到相同的異常。

有沒有人在UWP中遇到類似這樣的事情?

+0

不確定問題是否出現在您自己的代碼中。觸發器是什麼?請與我們分享[mcve]。 –

+0

我看不到任何理由爲什麼要在命令綁定中放置'UpdateSourceTrigger = PropertyChanged'!通常情況下,一個命令永遠不會改變(但是在命令執行方法內部沒有任何東西阻止你使用邏輯!) –

回答

0

根據此:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/cfa7416c-435f-4f4b-9ad0-2b290b4ee978/w81-windows-81-app-working-properly-in-windows-81-throws-comexception-0x80004005-when-it-is?forum=wpdevelop

我有同樣的情況,這是CanExecuteChanged即將被調用的命令是不是在屏幕上當前視圖中的一個相同的看法。

作爲解決方案:我只是把CanExecuteChanged?.Invoke(this,EventArgs.Empty);嘗試使用COMException的空catch塊:

catch(System.Runtime.InteropServices.COMException ex) { } 
相關問題