[英]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)是的。
答案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.