| 

.NET C# Java Javascript Exception

2
Hallo ich beschäftige mich seit einiger Zeit mit WPF und habe auch schon kleine Dinge umgesetzt, jetzt steht aber ein größeres Projekt an und ich möchte das MVVM Pattern einsetzen.
Jetzt zu meiner Frage wie behandle ich (richtig) die Events (z.B.: SelectionChanged) der Controls aus der View. Ich hab schon vieles gelesen nur habe ich immer den Eindruck das es mehr ein Workaround als die korrekte Vorgehensweise ist.
News:
29.11.2011
MaHo 61 1 3
3 Antworten
2
Hallo,

wie behandle ich (richtig) die Events (z.B.: SelectionChanged) der Controls aus der View.

I.d.R. gar nicht. Wozu auch? Es liegen DependencyProperties zugrunde und mit Datenbindung kannst du das ViewModel dagegen binden.
Für das SelectionChanged gibts das SelectedItem das zu binden ist. Wenn du innerhalb von den ViewModel eine Benachrichtung dafür bräuchtest (gibts das Wort?) dann hat das ViewModel eh INotifyPropertyChanged implementiert und dessen PropertyChanged ist zu behandeln.

mfG Gü
29.11.2011
gfoidl 9,4k 3 5
Jop das Wort gibt es :p
Nicolai Schönberg 29.11.2011
Für das SelectionChanged Event und die SelectedItem Property gebe ich Dir völlig Recht, da brauch ich das Event nicht. Bei anderen Events gibt es aber keine entsprechende Property, (willkürliches Beispiel: KeyDown). Um ein solches Event per CommandBinding direkt ans VM zu binden (und nicht den Umweg über einen Handler machen zu müssen), kann man dann, wie ich in meiner Antwort vorgeschlagen habe, zu einem Behaviour greifen.
ffordermaier 30.11.2011
1
@Nicolai: danke :-)

@Florian: klar, das mit dem Behaviour ist ganz nett und v.a. wiederverwendbarer als mit den Event-Handler. Nur stell ich mir die Frage ob ich ein KeyDown im VM überhaupt behandeln will. Mir fällt dazu kein vernüftiger Grund ein. Aber es war ja von dir nur als Beispiel aufgeführt, es kann sicher Gründe dafür gegeben und somit brauchen wir das auch nicht weiter vertiefen (könnte eine ewige Diskussin werden ;-)). Jedenfalls Danke für den Hinweis.
gfoidl 30.11.2011
1
Was genau siehst du als Workaround?
Allgemein kann ich zu MVVM folgendes empfehlen: WPF Apps With The Model-View-ViewModel Design Pattern
Im Speziellen zu deiner Frage: Advanced WPF: Understanding Routed Events and Commands In WPF
29.11.2011
Jürgen Luhr 7,1k 2 9
1
Hallo MaHo,

wenn ich Dich richtig verstehe, hast Du Bedenken, die Events der Controls im Code-Behind File der View zu behandeln. Ich mag das auch nicht. leere CodeBehind Files sind mir das Liebste.
Um das hinzubekommen, gibt es ein Konzept namens Behaviours. Hier findest Du ein Beispiel für ein EventToCommandBehaviour, mit dem Du jedes Event an ein ICommand binden kannst. Damit schaffst Du eine Möglichkeit, die Events in der View direkt an ICommand-Properties deines ViewModels zu binden.
Mittelfristig würde ich Dir zum Einsatz eines der vielen verfügbaren MMVM Frameworks raten, diese stellen solche Funktionalität und einiges mehr zur Verfügung.
Für den Anfang kann es Dir aber auch helfen, ein solches Behaviour selbst zu implementieren und die Mechanismen zu verstehen (weil Du schreibst, dass Du erst damit angefangen hast).

Viel Erfolg
Florian
29.11.2011
ffordermaier 8,4k 3 9

Stelle deine .net-Frage jetzt!