Hallo,
ich habe mich entschlossen, mich in die Welt von WPF einzuarbeiten. Dazu habe ich einige Tutorials von A bis Z gelesen, für Orientierung und erste Schritte war es gut. Nun habe ich angefangen, ein erstes Projekt im WPF fertigzustellen. Beim Codeschreiben sind aber einige Fragen aufgekommen.
1. Model und INotifyPropertyChanged
Für mein Projekt benutze ich MSSQL localdb und als ORM EF Core. Ich habe die ersten Modell(Entity)klassen angelegt, Migration durchgeführt, alles Ok. Nun habe ich gelernt, dass damit das Databinding im WPF funktioniert, müssen die Modellklassen INotifyPropertyChanged implementieren. Dazu habe ich den klassichen Folder Model(s) angelegt und meine Entitymodelle quasi wiederholt, ergänzt um die Implementierung der INotifyPropertyChanged Interface (dazu verwende ich eine Basisklasse im Sinne DRY).
Meine Fragen dazu: kann man seine eigene Entityklassen zur Implementierung der INotifyPropertyChanged verwenden? Muss man das Modell unbedingt wiederholen? Oder ist es besser, die zwei Klassen auseindanderzuhalten, da z. B. die Entityklasse auch Navigation Properties und evtl. Attribute für die Datenbanktabellenkonfiguration enthalten kann?
2. Model und ViewModel
Es gibt Tutorials, wo es eine eigene Modellklasse mit INotifyPropertyChanged erstellt wird und dann diese Klasse im ViewModel verwendet wird. Es gibt aber andere, wo die Modellproperties samt INotifyPropertyChanged im ViewModel deklariert werden. War es in diesen Fällen nur der Einfachheit halber so? Es ist doch sauberer und strukturierter, separate Modellklassen zu haben, richtig?
3. Commands und EventHandlers
Es wird geraten, im WPF mit Commands zu arbeiten, welche im ViewModel deklariert und im View durch Binding benutzt werden. Somit beinhaltet das Codebehind für XAML nur InitializeComponent und evtl. die Zuordnung des DataContexts zu einem ViewModel (falls es nicht im View selbst deklariert wurde). Wenn es so üblich ist, dann wozu braucht man EventHandlers? Man kann doch alles mit Commands lösen, oder? Ich bin noch nicht so tief ins Thema eingestiegen, vielleicht kommt das Nutzen des EventHandlers erst später zutage?
4. Dependency Injection
Unter WPF Core ist es empfohlen - ähnlich wie im ASP.NET Core - ein globales ServiceHost beim Applicationsstart aufzubauen. Das habe ich auch gemacht und den EF DataContext hinzugefügt. Man kann dies u. a. auch für das Repository Pattern gut benutzen, wenn man es möchte (Stichwort: DDD und Query Object Pattern). Soweit gut. Nun liest man mehr, findet man, dass es möglich ist, auch das ViewModel ins View zu injecten. Macht das Sinn? Oder ist es evtl. etwas übertrieben? Oder nur dann sinnvoll, wenn man das ViewModel auch in anderen Views verwenden möchte?
Ich denke, das waren fürs Erste meine Fragen. Danke schon mal vorab für eure Antworten.
ich habe mich entschlossen, mich in die Welt von WPF einzuarbeiten. Dazu habe ich einige Tutorials von A bis Z gelesen, für Orientierung und erste Schritte war es gut. Nun habe ich angefangen, ein erstes Projekt im WPF fertigzustellen. Beim Codeschreiben sind aber einige Fragen aufgekommen.
1. Model und INotifyPropertyChanged
Für mein Projekt benutze ich MSSQL localdb und als ORM EF Core. Ich habe die ersten Modell(Entity)klassen angelegt, Migration durchgeführt, alles Ok. Nun habe ich gelernt, dass damit das Databinding im WPF funktioniert, müssen die Modellklassen INotifyPropertyChanged implementieren. Dazu habe ich den klassichen Folder Model(s) angelegt und meine Entitymodelle quasi wiederholt, ergänzt um die Implementierung der INotifyPropertyChanged Interface (dazu verwende ich eine Basisklasse im Sinne DRY).
Meine Fragen dazu: kann man seine eigene Entityklassen zur Implementierung der INotifyPropertyChanged verwenden? Muss man das Modell unbedingt wiederholen? Oder ist es besser, die zwei Klassen auseindanderzuhalten, da z. B. die Entityklasse auch Navigation Properties und evtl. Attribute für die Datenbanktabellenkonfiguration enthalten kann?
2. Model und ViewModel
Es gibt Tutorials, wo es eine eigene Modellklasse mit INotifyPropertyChanged erstellt wird und dann diese Klasse im ViewModel verwendet wird. Es gibt aber andere, wo die Modellproperties samt INotifyPropertyChanged im ViewModel deklariert werden. War es in diesen Fällen nur der Einfachheit halber so? Es ist doch sauberer und strukturierter, separate Modellklassen zu haben, richtig?
3. Commands und EventHandlers
Es wird geraten, im WPF mit Commands zu arbeiten, welche im ViewModel deklariert und im View durch Binding benutzt werden. Somit beinhaltet das Codebehind für XAML nur InitializeComponent und evtl. die Zuordnung des DataContexts zu einem ViewModel (falls es nicht im View selbst deklariert wurde). Wenn es so üblich ist, dann wozu braucht man EventHandlers? Man kann doch alles mit Commands lösen, oder? Ich bin noch nicht so tief ins Thema eingestiegen, vielleicht kommt das Nutzen des EventHandlers erst später zutage?
4. Dependency Injection
Unter WPF Core ist es empfohlen - ähnlich wie im ASP.NET Core - ein globales ServiceHost beim Applicationsstart aufzubauen. Das habe ich auch gemacht und den EF DataContext hinzugefügt. Man kann dies u. a. auch für das Repository Pattern gut benutzen, wenn man es möchte (Stichwort: DDD und Query Object Pattern). Soweit gut. Nun liest man mehr, findet man, dass es möglich ist, auch das ViewModel ins View zu injecten. Macht das Sinn? Oder ist es evtl. etwas übertrieben? Oder nur dann sinnvoll, wenn man das ViewModel auch in anderen Views verwenden möchte?
Ich denke, das waren fürs Erste meine Fragen. Danke schon mal vorab für eure Antworten.