WPF MVVM - Befehlsbindung innerhalb eines ItemsControl
Ich konvertiere gerade ein kleines WPF-Projekt nach MVVM. Ich habe einList<CustomObject>
im ViewModel des Hauptfensters, an das mein ItemsControl bindet, und verwendet ein DataTemplate, um die Benutzeroberfläche jedes Elements zu erstellen. Mein alter Code verwendete eine Ereignisbehandlungsroutine in der DataTemplate, um ein Klickereignis zu behandeln. Ich möchte eine Art Befehlsbindung verwenden, um meine Code-Behind-Ereignishandler zu entfernen, aber der DataContext der Elemente in meinem ItemsControl ist das Modellobjekt, sodass ich zurzeit keine Bindung an einen ICommand vom ViewModel aus ausführen kann.
Also, ich schätze, es gibt ein paar Möglichkeiten, dies anzugreifen und ich bin nicht sicher, welche die "MVVM" -Methode wäre, um dies zu tun. Binde ich die ItemsControl.ItemsSource an eine Auflistung einer neuen ViewModel-Klasse, die jedes Element darstellt? Oder verwende ich UserControls anstelle einer DataTemplate und kann dann jedes UserControl an seine eigene Instanz eines ViewModel binden, das es darstellt? Oder gibt es eine Art Bindungsausdruck, mit dem ich auf den DataContext des Fensters zurückgreifen kann, um Zugriff auf das ViewModel zu haben (während ich das eingebe, klingt es nur schlecht, also nehme ich ein großes "NEIN" an) Idee)?
Außerdem möchte ich meinen Befehl an das LeftMouseButtonUp-Ereignis eines Grid-Steuerelements binden. Es gibt keinen "Befehl" für ein Raster, daher habe ich versucht, InputBindings zu verwenden. Ich könnte einen statischen Befehl (wie einen der integrierten ApplicationCommands) verwenden, aber ich könnte keinen Bindungsausdruck zum Binden an eine ICommand-Instanz verwenden, die eine Eigenschaft von ViewModel ist, da MouseBinding.Command keine DependencyProperty ist.
Ich bin ziemlich verwirrt über das Thema Ereignisbehandlung in MVVM, daher sind alle Informationen willkommen.