2016-08-08 55 views
0

Ich habe nicht zuvor mit WPF oder dem MVVM-Muster gearbeitet.
Ich möchte jedoch ein einfaches Dokumenten-Management-System erstellen und möchte dies mit den oben genannten Technologien tun.Wie MVVM mit der WPF-Strukturansicht implementieren?

Ich habe ein hierarchisches Dateisystem in meiner Datenbank modelliert und möchte es in einer Baumansicht anzeigen.
EER-Diagramm
Wie Sie sehen können, kann jedes Verzeichnis mehrere Unterverzeichnisse und mehrere Dateien enthalten.

Ich habe einige Tutorials zum Thema gelesen und wenn ich sie richtig verstanden habe, sollte ich Modellklassen für Verzeichnis und Datei erstellen, in denen die Daten aus der Datenbank direkt gespeichert werden.
Beispiel:

public class Directory 
{ 
    private int id; 
    public int Id 
    { 
     get { return id; } 
     set { id = value; } 
    } 

    private string name; 
    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

    private int parent; 
    public int Parent 
    { 
     get { return parent; } 
     set { parent = value; } 
    } 

    private DateTime dateCreatedOn; 
    public DateTime DateCreatedOn 
    { 
     get { return dateCreatedOn; } 
     set { dateCreatedOn = value; } 
    } 
} 

Dann sollte jede Modellklasse eine zugehörige Ansicht-Modellklasse haben, die zusätzliche Eigenschaften implementiert, die zur Beschreibung des UI-Element nur dann relevant sind, auf die dieser Klasse gebunden werden Objekte.
In diesem Fall sollte die View-Model-Klasse die Eigenschaft isExpanded und isSelected des treeviewitem aufweisen.
Dann würde ich eine andere View-Model-Klasse für die gesamte Baumansicht benötigen, die die Sammlung von Directorys und Dateien enthalten würde, die angezeigt werden sollen.

Meine Fragen sind:

  1. Habe ich das mvvm Konzept richtig verstanden?
  2. Welche Klasse, das Modell oder das Ansichtsmodell, des Verzeichnisses sollte die iNotifyPropertyChanged-Schnittstelle implementieren?
  3. Soll die View-Model-Klasse des Verzeichnisses dieselben Eigenschaften wie die Model-Klasse enthalten oder ist ein Verweis auf ein Model-Objekt in der View-Model-Klasse ausreichend?
  4. Wenn die View-Model-Klasse wieder dieselben Eigenschaften der Model-Klasse enthalten soll, dann ist dies die beste Möglichkeit, sicherzustellen, dass Model-Objekte und die zugehörigen View-Model-Objekte immer synchronisiert bleiben?

Ich hoffe, diese Frage ist verständlich und danke für alle Hilfe. Andahari

+0

Die Fragen 2-4 wurden sicherlich vorher einzeln gestellt. –

+0

HierarchicalDataTemplate – Will

Antwort

0

Antwort 1) Ja.

Antwort 2) View-Modell sollte die iNotifyPropertyChanged haben.

Antwort 3) Ja. und sie sollten explizit zugeordnet werden. dh:

this.property1 = model.property1 

Antwort 4) verwenden die gleichen Namen, und siehe Antwort 3.

Wenn Sie eine privat-öffentliche Eigentum Paar in der Ansicht-Modell verwenden, verwenden Sie INotifyPropertyChanged in der Ansicht-Modell, und Ordnen Sie die Eigenschaften des Modells den entsprechenden Eigenschaften im View-Modell zu, sollten Sie festlegen.

0

Modell kann auch die iNotifyPropertyChanged implementieren, müssen Sie die Eigenschaften in View Model nicht erneut zu wiederholen.

https://msdn.microsoft.com/en-us/library/gg405484(PandP.40).aspx

„Das Modell kann auch durch den IDataErrorInfo (oder INotifyDataErrorInfo) -Schnittstellen Berichtsdatenvalidierung und Fehler unterstützt. Die IDataErrorInfo und INotifyDataErrorInfo Schnittstellen erlaubt WPF Datenbindung benachrichtigt werden, wenn Werte so ändern, dass der UI sein kann, Sie ermöglichen außerdem die Unterstützung der Datenvalidierung und der Fehlerberichterstattung in der UI-Schicht. "