Quelle: dotnetpro
WPF-TreeView und MVVM in Einklang bringen, Teil 2 19.07.2021, 00:00 Uhr

Drücken, ziehen, loslassen

Ereignisbasierte Aktionen, antiquierte Windows-Techniken und MVVM kombinieren.
Der erste Teil [1] dieser Artikelserie zeigte Ihnen, wie Sie mit einigen trickreichen WPF-Techniken und etwas C#-Infrastruktur auch TreeView-Controls sehr elegant in das MVVM-Konzept einbinden können. Geht es jedoch um Techniken wie Drag-and-drop, dann wird es etwas kniffliger. Denn hier kommt man um die Implementierung zahlreicher Eventhandler nicht herum. In Bezug auf MVVM ist das kein Problem, solange man den Zugriffscode kapseln kann und im ViewModel keine Eventhandler oder Ähnliches auswerten muss. Dazu bieten sich mehrere Vorgehensweisen an. Man könnte ein Behavior (Ableitung von System.Windows.Forms.Design.Behavior<T>) schreiben, das man im XAML-Code einer gewöhnlichen TreeView zuordnet und das dann mit den betreffenden Eventhandlern umgehen kann. Alternativ nutzt man den Vererbungsmechanismus und leitet eine neue Klasse von TreeView ab. Oder man verwendet Aggregation und setzt ein neues Steuerelement aus einer TreeView und weiteren erforderlichen Komponenten zusammen. Und auch hier gibt es verschiedene Möglichkeiten, das zu realisieren.
Für die Umsetzung in diesem Artikel fiel die Wahl auf Aggregation in Form eines UserControls. Die Vorbereitungen hierzu wurden bereits im vorangegangenen Artikel getroffen. Der Vorteil des UserControls ist in diesem Fall, dass es den Entwicklungsfluss in Visual Studio besser unterstützt. Experimente, Tests und Fehlersuche gestalten sich damit einfacher, und man kann sich auf das Wesentliche beschränken. Später lässt sich der Code mit etwas Fleißarbeit in eine der anderen genannten Varianten transformieren.

Jetzt 1 Monat kostenlos testen!

Sie wollen zukünftig auch von den Vorteilen eines plus-Abos profitieren? Werden Sie jetzt dotnetpro-plus-Kunde.
  • + Digitales Kundenkonto,
  • + Zugriff auf das digitale Heft,
  • + Zugang zum digitalen Heftarchiv,
  • + Auf Wunsch: Weekly Newsletter,
  • + Sämtliche Codebeispiele im digitalen Heftarchiv verfügbar