簡體   English   中英

如何使用WPF樹視圖實現MVVM?

[英]How to implement MVVM with the WPF treeview?

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

我已經在數據庫中為分層文件系統建模,並希望在樹形視圖中顯示它。
EER圖
如您所見,每個目錄中可以有多個子目錄和多個文件。

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

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. 如果視圖模型類應再次包含與模型類相同的屬性,那么確保模型對象和關聯的視圖模型對象始終保持同步的最佳方法是什么?

我希望這個問題是可以理解的,並感謝您的所有幫助。 安達里

答案1)是的。

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

答案3)是。 並且應該明確地映射它們。 即:

   this.property1 = model.property1

答案4)使用相同的名稱,請參閱答案3。

如果在視圖模型中使用私有-公共屬性對,請在視圖模型中使用iNotifyPropertyChanged,並將模型的屬性映射到視圖模型中的相應屬性,則應進行設置。

模型也可以實現iNotifyPropertyChanged,您無需再次在視圖模型中重復屬性。

https://msdn.microsoft.com/zh-CN/library/gg405484(PandP.40).aspx

“該模型還可以通過IDataErrorInfo(或INotifyDataErrorInfo)接口支持數據驗證和錯誤報告。IDataErrorInfo和INotifyDataErrorInfo接口允許在值更改時通知WPF數據綁定,以便可以更新UI。它們還支持數據驗證。以及UI層中的錯誤報告。”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM