Hallo,
ich bin gerade dabei mich in WPF einzuarbeiten und nutze dafür MVVM.
Im meinem Beispielprogramm können Personen, Adressen etc. verwaltet werden. Daher habe ich auch eine Sicht (PersonView) die genau eine einzelne Person mit Adresse und Anrede anzeigt.
Um die ComboBoxen mit z.B. Anreden zu füllen möchte ich diese als statische Datasource aus der DB laden. Ich bin allerdings noch etwas unsicher, was der bessere Weg ist - Daten über das ViewModel beziehen oder über eine globale Resource. In der Beispielanwendung von WAF (BookLibrary) werden beispielweise Programmsprachen in einer globalen Resource gehalten.
Ich persönlich finde die globalen Resourcen ziemlich unsauber, da ich wichtige Daten nicht im ViewModel habe. Hierzu würde mich Eure Meinung interessieren.
Gruß
Ich bin allerdings noch etwas unsicher, was der bessere Weg ist - Daten über das ViewModel beziehen oder über eine globale Resource.
Verwende hier am besten das Repository-Pattern.
Erstelle ein Interface, das im einfachsten Fall einfach nur so aussieht:
public interface IPersonSource
{
IEnumerable<IPerson> ProvideAllPersons();
}
Dieses Interface kannst du dann deinem ViewModel als Konstruktorargument übergeben (bzw. per DI-Container einfach injizieren lassen).
Dein ViewModel selbst muss dann die Models (also die _IPerson_s) nur noch in z.B. _PersonViewModel_s wrappen, sie einer ObservableCollection<PersonViewModel> hinzufügen, aus der dann mittels DataTemplates die entsprechenden Views generiert werden.
Hallo erstmal danke für die Antwort!
Ein Repository für die Personen wird bereits über DI reingegeben. Es ist auch kein Problem, wenn die Viewmodels direkt mit den Repositories arbeiten?
Besten Gruß
Hallo itstata,
im ViewModel darfst du nicht direkt das Repository instanziieren. Du musst das mit einem Service Locator auflösen lassen. Alternativ kannst du das auch mit Dependency Injection machen. Wichtig ist nur, dass du nicht direkt auf _Repository _zugreifst, sondern auf IRepository.
zero_x
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
Es ist auch kein Problem, wenn die Viewmodels direkt mit den Repositories arbeiten?
Gegenfrage: Wer soll denn sonst mit dem Repository arbeiten? 😉
Ich halte das durchaus für legitim - solange das ViewModel nicht die Aufgabe des Repositories übernimmt, besteht IMHO eine ordentliche Trennung.
Alles klar...
danke für die Antworten, der Ansatz mit diesen globalen Resourcen fand ich eh Mist. Das Interface für das Repository hatte ich bereits übergeben...klappt so gut.