Looking for wpf Keywords? Try Ask4Keywords

wpfMVVM in WPF


Bemerkungen

Modelle und Ansichtsmodelle

Die Definition eines Modells wird häufig heiß diskutiert, und die Grenze zwischen einem Modell und einem Ansichtsmodell kann verschwimmen. Manche bevorzugen nicht zu „verunreinigen“ ihre Modelle mit der INotifyPropertyChanged - Schnittstelle, und stattdessen die Modell - Eigenschaften in der Ansicht-Modell duplizieren, die diese Schnittstelle nicht implementiert. Wie viele Dinge in der Softwareentwicklung gibt es keine richtige oder falsche Antwort. Seien Sie pragmatisch und tun Sie, was sich richtig anfühlt.

Separation anzeigen

Die Absicht von MVVM besteht darin, diese drei unterschiedlichen Bereiche - Modell, Ansichtsmodell und Ansicht - voneinander zu trennen. Während es für die Ansicht zulässig ist, auf das Ansichtsmodell (VM) und (indirekt) auf das Modell zuzugreifen, besteht die wichtigste Regel in MVVM darin, dass die VM keinen Zugriff auf die Ansicht oder deren Steuerelemente haben sollte. Die VM sollte über öffentliche Eigenschaften alles bereitstellen, was die Ansicht benötigt. Die VM sollte UI-Steuerelemente wie TextBox , Button usw. nicht direkt TextBox oder TextBox .

In manchen Fällen kann es schwierig sein, mit dieser strikten Trennung zu arbeiten, insbesondere wenn Sie einige komplexe UI-Funktionen in Betrieb nehmen müssen. Hier ist es durchaus akzeptabel, auf Ereignisse und Ereignishandler in der "Code-Behind" -Datei der Ansicht zurückzugreifen. Wenn es sich um eine reine UI-Funktionalität handelt, werden auf jeden Fall Ereignisse in der Ansicht verwendet. Es ist auch akzeptabel, dass diese Ereignishandler öffentliche Methoden für die VM-Instanz aufrufen. Vergeben Sie die Verweise nicht an die Steuerelemente der Benutzeroberfläche oder ähnliches.

RelayCommand

Leider ist die in diesem Beispiel verwendete RelayCommand Klasse nicht Teil des WPF-Frameworks (sollte es auch sein!), Aber Sie finden sie in fast jedem Werkzeugkasten des WPF-Entwicklers. Bei einer schnellen Online-Suche werden zahlreiche Code-Snippets angezeigt, die Sie anheben können, um eigene zu erstellen.

Eine nützliche Alternative zu RelayCommand ist ActionCommand das als Teil von Microsoft.Expression.Interactivity.Core bereitgestellt wird und vergleichbare Funktionen bietet.

MVVM in WPF Verwandte Beispiele