Ich entwickle eine WPF-Anwendung mit MVVM und lerne, wie man Dinge am besten macht.
Ich habe ein WPF-Formular mit Selektoren, zwei Listen mit Suchfeldern und einige andere Elemente. Derzeit ist alles in einer Form und es funktioniert. Inzwischen hat die VM für dieses Formular mehr als 800 Zeilen und ist noch nicht fertig.
Ich möchte dieses Formular und den Code besser strukturieren. Ich dachte an Regionen, Dateien mit Teilklassen und Benutzersteuerelemente. Ich denke, Benutzersteuerelemente sind am besten geeignet, da sie einige Steuerelemente und Logik enthalten. Wenn ich Benutzersteuerelemente verwenden würde, würde die Menge an Code in diesem Fenster und in der VM drastisch reduziert.
Um dies richtig zu machen, arbeite ich das Buch "Pro WPF 4.5 In C # 4th Edition", Kapitel 18 - Benutzerdefinierte Elemente und das ColorPickerUserControl-Beispiel durch. Das Beispiel handelt von einem Farbwähler mit drei Schiebereglern und 150 Codezeilen.
Ich denke, ich verstehe, wie es funktioniert, aber es scheint mir, dass das Erstellen von Benutzersteuerelementen selbst mit sehr eingeschränkten Funktionen wie in diesem Beispiel eine Menge Arbeit ist . Wenn ich diese Steuerelemente mehrmals verwenden würde, wäre es meines Erachtens sinnvoll, dies zu tun. Aber wenn ich die Steuerelemente nur einmal benutze und dies nur tue, um meine Form zu strukturieren, dann scheint dies eine Menge Arbeit für wenig Gewinn zu sein.
Meine Frage lautet: Ist es empfehlenswert, Benutzersteuerelemente zum Strukturieren von Formularen zu verwenden, auch wenn diese Benutzersteuerelemente nur einmal verwendet werden? Wenn nicht, gibt es eine bessere Alternative?
Bearbeiten (nicht zum Lesen erforderlich, nur weitere Informationen): Bis jetzt habe ich keine Details geschrieben, weil ich etwas über das Prinzip lernen wollte, aber nachdem ich 17 von 26 der interessanten Antwort gelesen habe, sind hier einige Details: Dieses Formular dient zur Auswahl von Musiktiteln.
Gruppe A: (mögliche Benutzersteuerung A) bezieht sich auf die Art der Auswahl wie Auswahl nach Künstler oder Album, mit oder ohne Video, möglicherweise Erscheinungsjahr usw.
Gruppe B: Diese Liste enthält Künstlernamen, die nach den Kriterien in A gefiltert werden. Der Benutzer kann die Liste filtern, dh nur Künstlernamen anzeigen, die "top" enthalten.
Gruppe C: Diese Liste zeigt Titel des in B ausgewählten Künstlers auch nach Kriterien von A (dh Audio oder Video). Es kann ähnlich wie B gefiltert werden, dh nur Titel, die "Sie" enthalten.
Der größte Teil der Logik findet in der VM statt (DataContext des Formulars). Die Listen von A und B stammen aus einer Datenbank. Die Listen werden gefiltert und für die Präsentation vorbereitet (dh mehrere Titel mit demselben Namen, jedoch in unterschiedlichen Alben). Der Benutzer wählt einen Titel in der C-Liste durch Doppelklick aus oder verwendet Drag & Drop in ein anderes WPF-Formular.
Was ich will: Ich möchte lesbaren Code, damit ich ihn leicht ändern kann. Wenn ich einen weiteren Filter hinzufügen möchte, z. B. nur Künstlerinnen anzeigen möchte, wäre es gut, wenn ich einfach zur Benutzersteuerung A gehen und Kontrollkästchen für Künstlerinnen und / oder Künstlerinnen hinzufügen könnte.
Die XAML in der aktuellen Form ist kein Problem, sie ist gut strukturiert. Die VM verfügt jedoch über Code für alle oben genannten Funktionen. Einige Dinge befinden sich im Konstruktor, andere im Befehlsabschnitt, einige Eigenschaften und Hintergrundfelder. Ich kann jetzt noch Dinge finden, aber ich denke, es wäre besser, wenn der Code strukturierter wäre. Deshalb denke ich über die Benutzersteuerelemente nach.
Ich versuche, MVVM zu folgen, weil ich denke, dass die Logik dahinter sehr viel Sinn macht. Aber ich bin kein fanatischer Anhänger einer theoretischen Praxis. Das heißt, wenn ich etwas in 5 Zeilen CodeBehind oder in 50 Zeilen in der VM tun kann, werde ich es wahrscheinlich in CodeBehind tun. Meine Frage betrifft das Prinzip, wie strukturierte Formulare in WPF erstellt werden. Das oben beschriebene Formular ist ein gutes Beispiel, aber die Antwort sollte sich nicht auf dieses einzelne konzentrieren, sondern auf die Idee, wie WPF-Formulare strukturiert werden, dh mit (oder ohne) Benutzersteuerelementen.
Warum ich Benutzersteuerelemente für viel Arbeit halte: Sie haben Abhängigkeitseigenschaften, geroutete Ereignisse usw. All dies scheint mir viel komplizierter zu sein als „normale“ Eigenschaften mit Hintergrundfeldern und INotify. Aber vielleicht muss ich mich nur an Abhängigkeitseigenschaften, geroutete Ereignisse usw. gewöhnen.
<UserControl>
</UserControl>
. Das ist es.