2010-05-28 10 views
13

Ich baue eine WPF-Anwendung mit MVVM-Muster (beide sind neue Technologien für mich). Ich verwende Benutzersteuerelemente für einfache Bits wiederverwendbarer Funktionalität, die keine Geschäftslogik enthalten, und MVVM-Muster, um Anwendungslogik zu erstellen. Angenommen, eine Sicht enthält mein Benutzersteuerelement, das Ereignisse auslöst, und ich möchte diesem Ereignis einen Ereignishandler hinzufügen. Dieser Ereignishandler sollte sich im Ansichtsmodell der Sicht befinden, da er Geschäftslogik enthält. Die Frage ist - Ansicht und das Ansichtsmodell sind nur durch Bindung verbunden; Wie verbinde ich einen Event-Handler mit Binding? Ist es überhaupt möglich (ich vermute nicht)? Wenn nicht - wie sollte ich mit Ereignissen aus einem Steuerelement im Ansichtsmodell umgehen? Vielleicht sollte ich Befehle oder INotifyPropertyChanged verwenden?WPF - Behandlung von Ereignissen von der Benutzersteuerung in View Model

Antwort

11

Im Allgemeinen ist es eine gute MVVM-Praxis, Code im Code zu vermeiden, wie dies der Fall wäre, wenn Sie Ereignisse in Ihren Benutzersteuerelementen verwenden. Verwenden Sie also wenn möglich INotifyPropertyChanged und ICommand.

Mit diesem gesagt, je nach Ihrem Projekt und wie pragmatisch Sie sind, macht es manchmal mehr Sinn, den Code der Steuerung zu verwenden.

ich bei einigen Gelegenheiten haben etwas so benutzten:

private void textBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
{ 
    MyViewModel vm = this.DataContext as MyViewModel; 
    vm.MethodToExecute(...); 
} 

Sie auch Attached Command Behaviour, weitere Informationen über diese in Erwägung ziehen könnte und Implementierungen hier zu finden:

Firing a double click event from a WPF ListView item using MVVM

+0

Kontrolle wiederverwendbar sein sollte, so wird der Code nicht - es bindet das Steuerelement an ein bestimmtes Ansichtsmodell. Befehle ... Wahrscheinlich nicht - sie sind eher für Benutzeraktionen. INotifyPropertyChanged dann? Danke :) – Vitaly

+0

Schwer für mich zu sagen, ohne weitere Einzelheiten zu kennen. Aber ich habe einige Links zu verwandten Informationen hinzugefügt: – ThomasAndersson

+0

@Vitaly Wenn Sie sich Sorgen machen, die View mit dem expliziten ViewModel zu verknüpfen, können Sie das ViewModel in eine Schnittstelle einfügen. Ich würde in Attached Command Behaviors nachsehen, dass sie zur akzeptierten Praxis werden. Schauen Sie sich auch MVVMLight oder Caliburn als Framework an, um Ihre MVVM-Arbeit zu unterstützen, es wird Ihnen das Leben viel leichter machen. – Agies

Verwandte Themen