2009-12-11 10 views
7

Ich verwende das MVVM-Muster für eine WPF-Anwendung. An mehreren Stellen band ich Befehle an Eingabeelementen in den Ansichten wie in der folgenden XAML:Was ist die beste Vorgehensweise zum Behandeln von Ausnahmen bei der Verwendung der Befehlsbindung in WPF?

<Button Command="{Binding TheClickCommand}" >Click</> 

Was ist die beste Praxis Ausnahmen für den Umgang mit ausgelöst, wenn der Befehl in meinem Viewmodel ausgeführt wird - das heißt, was ist der beste Weg, um informieren Sie die Ansicht, dass etwas nicht stimmt? Kann ich das IDataErrorInfo-Muster verwenden oder gibt es ein anderes integriertes Muster für dieses Szenario?

Antwort

1

Ich hasse diese Antwort, aber es hängt wirklich von einem Kontext ab.

Heute habe ich IoC, verwenden ILoggerService oder INotificationSerivce oder beides und tun das Zeug zu bekommen, wenn etwas schief gelaufen ist. Morgen kann ich glücklich sein mit raw MessageBox.Show() irgendwo in der DispatcherUnhandledException Event-Handler. Oder vielleicht werde ich meine eigene angefügten Eigenschaft schreiben ala

<Button loc:Commanding.ExceptionAwareCommand="{loc:CommandExtension 
      Command={Binding TheClickCommand}, 
      FallBackCammand={Binding ErrorHandlerCommand}}" /> 

und mit ihr leben ...

Wahrscheinlich ist die Antwort gehen kann wie folgt aus: „Wählen Sie die beste Methode zwischen zwei Klassen zu kommunizieren und es verwenden“ . Tut mir leid, dass ich nicht konkret bin ... Vielleicht wird jemand anders genauer sein.

Hinweis: Die in der Antwort angegebenen Namen der Schnittstellen sind kein WPF-Standard. Ich benutze sie nur als Beispiel.

Prost

+0

Die Schnittstellennamen sind möglicherweise kein Standard, aber sie scheinen sich als Konvention herauszubilden. –

+0

Obwohl ich auf eine konkretere Antwort gehofft habe, denke ich, dass deine Antwort so nah wie möglich ist. Vielen Dank :-) –

0

Die einfachste Antwort ist, einfach ein Nachrichtenfeld zu öffnen. Ein ausgeklügelterer Ansatz könnte darin bestehen, einen Benachrichtigungsdienst zu verwenden, der die Nachricht für den Benutzer in einer Weise anzeigt, die für Ihre App geeignet ist, aber mit einem gefälschten Dienst für Komponententests ausgegeben werden kann.

+0

Aber soll ich ein Event auf meinem Viewmodel und lassen Sie den Blick auf dieses Ereignis hören, oder was ist der beste Weg? –

+0

Nicht, es sei denn, die Ansicht muss eine spezielle Fehlerbehandlung bieten. Meistens möchten Sie den Benutzer über den Fehler informieren. Der Hauptzweck von Ansichtsmodellen besteht darin, Präsentationslogik aus der Ansicht zu entfernen. –

Verwandte Themen