我仍然試圖繞過MVVM的頭。比方說,我有一個模型,它看起來是這樣的:WPF: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,選擇的數據網格將綁定到「公司」路徑。一切的偉大至今....我得到一個不錯的展開/摺疊界面進入Divions,部門,員工...
除外:
如果網格是可編輯...部門名稱應能夠被更改(並通過ViewModel進行驗證,對於員工姓名也是如此)。
如果我想添加新員工,部門等,所有這些都應該反映在網格中而不需要重新綁定(這是WPF數據綁定點不是嗎?)
潛在的解決方案:
你必須爲每個域類單獨ViewModel類...
這似乎從DTO暗示映射了很多 - >視圖模型,複製(因爲它們幾乎是相同的對象,但不完全)。鑑於我可能已經從服務端的某種ORM實體 - > DTO進行映射,通過有線(WCF)將其發送到客戶端,將每個DTO層次結構映射到其自己的ViewModel中一個沉重的,昂貴的過程(更不用說涉及這樣做的工作)。
像INotifyPropertyChanged, ObservableCollection等放入我的DTO中看起來像是一種破解。
有沒有人有更好的解決方案?我瘋了嗎? ;-)