2016-08-08 88 views
0

我以前沒有用過WPF或MVVM模式。
但是我想創建一個簡單的文檔管理系統,並希望使用上述技術。如何使用WPF treeview實現MVVM?

我已經在我的數據庫中建立了一個分層文件系統,並希望在樹視圖中顯示它。
EER-Diagramm
正如你所看到的,每個目錄可以有多個子目錄和多個文件。

我已經閱讀了關於該主題的一些教程,如果我正確理解了它們,那麼我應該爲其中直接存儲數據庫數據的目錄和文件創建模型類。
實施例:

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; } 
    } 
} 

然後,每個模型類應該有它實現其是僅用於描述UI元素爲該類的哪些對象將被綁定相關的其他屬性相關聯的視圖模型類。
在這種情況下,視圖模型類應該具有treeviewitem的isExpanded和isSelected屬性。
然後,我需要另一個視圖模型類爲整個樹視圖,其中將包含應該顯示的導演和文件的集合。

我的問題是:

  1. 我有沒有正確地理解MVVM概念?
  2. 目錄的哪個類,模型或視圖模型應該實現iNotifyPropertyChanged接口?
  3. 目錄的視圖模型類應該包含與模型類相同的屬性,還是視圖模型類中對模型對象的引用是否足夠?
  4. 如果視圖模型類應該再次包含模型類的相同屬性,那麼確保模型對象和關聯的視圖模型對象始終保持同步的最佳方法是什麼?

我希望這個問題是可以理解的,謝謝你的一切幫助。 Andahari

+0

問題2-4肯定是單獨提出的。 –

+0

HierarchicalDataTemplate – Will

回答

0

答案1)是的。

答案2)視圖模型應該有iNotifyPropertyChanged。

答案3)是的。他們應該明確映射。即:

this.property1 = model.property1 

答案4)使用相同的名字,看看答案3.

如果您使用的視圖模型公私財產對,在視圖模型使用INotifyPropertyChanged的,並將模型的屬性映射到視圖模型中的相應屬性,應該設置。

0

模型也可以實現iNotifyPropertyChanged,你不需要再次在視圖模型中重複屬性。

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

「的模式還可以支持數據驗證和錯誤通過IDataErrorInfo的(或INotifyDataErrorInfo)接口報告該IDataErrorInfo的和INotifyDataErrorInfo接口允許WPF數據綁定時得到通知的值改變,使得UI可以是他們還支持UI層中的數據驗證和錯誤報告。「