簡體   English   中英

WPF:MVVM和編輯分層數據

[英]WPF: MVVM & Editing Hierarchical Data

我仍然試圖圍繞MVVM。 假設我有一個看起來像這樣的模型:

public class Company  
{  
    public IList<Division> Divisions { get;set;}  
}

public class Division  
{  
    public string Name { get;set;}
    public IList<Department> Departments { get;set}
}  

public class Department
{
    public string UnitNumber { get;set;}
    public string DepartmentName { get;set;}
    public IList<Employee> Employees { get;set;}
}

public class Employee
{
    public string FirstName { get;set;}
    public string LastName { get;set;}
    public string JobTitle { get;set;}
}

現在假設我想在分層網格中顯示公司層次結構,我在下面創建了一個CompanyViewModel類:

public class CompanyViewModel : INotifyPropertyChanged
{
    private Company _company;
    public Company Company
    {
         get { return _company;}
         set { _company = value; NotifyPropertyChanged("Company");}
    }
}

現在在我的視圖(WPF)上,我將數據上下文設置為ViewModel,並且選擇的datagrid將綁定到“Company”路徑。 到目前為止一切都很棒....我在Divions,部門,員工中得到了一個很好的擴展/折疊界面......

除了:

  1. 如果網格是可編輯的,那么...部門名稱應該能夠被更改(並由ViewModel驗證,對於員工名稱也是如此)。

  2. 如果我想添加新的員工,部門等,那么所有這些應該反映在網格中而不重新綁定(這就是WPF數據綁定的重點不是嗎?)

潛在解決方案

每個Domain類都有一個單獨的ViewModel類...

這似乎意味着很多來自DTO的映射 - > ViewModel,重復(因為它們幾乎是相同的對象,但並不完全相同。)鑒於我可能已經從某種ORM實體映射 - >服務端的DTO ,通過線路(WCF)將其發送到客戶端,將每個DTO層次結構映射到它自己的ViewModel是一個繁重而昂貴的過程(更不用說這樣做所涉及的工作。)

將INotifyPropertyChanged,ObservableCollection等內容放到我的DTO中似乎是一種黑客行為。

有沒有人有更好的解決方案? 我瘋了嗎? ;-)

“將INotifyPropertyChanged,ObservableCollection等內容放到我的DTO中似乎是一種黑客行為。”

我感覺到你的痛苦,但這是我在幾個項目中采取的方法。

結論:對於WPF數據綁定到“工作”,如您所宣傳的那樣,您綁定的對象/集合需要支持INotifyPropertyChanged和ObservableCollection。

我個人認為創建支持這一點的DTO比不斷地將數據來回轉換為視圖模型或其他中間對象(本質上是DTO對象的更豐富版本)的工作少得多。

如果您厭倦了輸入INotifyPropertyChanged的代碼而且還使用了自動屬性,為什么不看看MoXAML Power Toys ,它允許您將自動屬性轉換為可通知的屬性?

暫無
暫無

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

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