2017-02-20 3 views
1

Ich habe einen RelayCommand, binded zu einem AppBarButton, wie:COMException bei RaiseCanExecuteChanged bei UWP

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

Der CanExecute Eigenschaft Befehl ist nur eine einfache Nullprüfung.

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

Aber, wenn die RaiseCanExecuteChanged (über Trigger) aufgerufen wird, schnell, mehrere Male, dann hier:

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

ich die folgende Ausnahme erhalten:

„Fehler HRESULT E_FAIL zurückgegeben wurde von einem Aufruf an eine COM-Komponente. "

Wenn ich die Command-Eigenschaft Bindung aus der Ansicht entfernen, funktioniert es.

Ich habe sogar versucht, eine Task.Delay (200) vor dem Anheben der CanExecuteChangeds am Trigger, aber ich bekomme die gleiche Ausnahme.

Hat jemand in UWP so etwas erlebt?

+0

Nicht sicher, ob das Problem in Ihrem eigenen Code war. Was ist der Auslöser? Bitte teile ein [mcve] mit uns. –

+0

Ich sehe keinen Grund, warum Sie 'UpdateSourceTrigger = PropertyChanged' auf eine Befehlsbindung setzen würden! Normalerweise ändert sich ein Befehl nie (aber nichts hält Sie davon ab, Logik in der Befehlsausführungsmethode zu haben!) –

Antwort

0

dies nach: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

ich die gleiche Situation haben, der Befehl, CanExecuteChanged ist etwa zu bekommen aufgerufen ist, ist nicht auf die gleichen Ansichten wie die aktuelle Ansicht eines auf dem Bildschirm.

Als Lösung: Ich habe nur die CanExecuteChanged? .Invoke (this, EventArgs.Empty); in einen Versuch, mit einem leeren catch-Block für die COMException:

catch(System.Runtime.InteropServices.COMException ex) { } 
Verwandte Themen