此問題是this older之一的後續行爲,它不僅僅是一個確認而是一個未解決的問題。在分層數據結構中向MVVM添加編輯
我的ViewModel實例有一個模型的私人實例,_modelInst
。
在編輯過程中,ViewModel擁有模型數據的獨佔訪問權限(因此模型不需要實現INotifyPropertyChanged)。
現在有三種方式,我想出瞭如何從視圖編輯模型數據:
獲取/直接在模型實例設置
例如對於簡單值字段
return _modelInst.fieldname;
_modelInst.fieldname = value;
這一個容易實現......創建一個視圖模型實例,並在父母的數據結構,操作系統
例如對於更復雜的對象類型,如結構:- 創建一個新的視圖模型爲該類型。
ViewModel知道父級及其字段名。 - 顯示,在一個ContentControl中+的DataTemplate
- 獲取/設置:
經由與字段名作爲參數,
覆蓋即使只有一個字段被改變了整個原始對象的父的方法
這意味着創建一個新的接口(其中更新例程在
_modelInst
上工作),由父級爲每個這樣的結構實現。- 創建一個新的視圖模型爲該類型。
創建視圖模型實例與父的數據結構並不直接瞭解
例如用於經由- 命令父類
創建新的視圖模型爲每個類
發送更新指令到母體內(列表)類
- 消息
- 反射(父母通過比較實例知道哪個孩子稱爲功能
將所有存儲的兒童)
所有這些都是一團糟實施,爲 創建功能是編輯模型的各個領域。
這意味着該模型的幾乎所有領域...- 命令父類
(4)人們可以創建一個通用的視圖模型,其通過反射單獨工作,其中每個子對象 知道其母公司和其字段名(+索引,如果在列表中)。
只有根的邏輯會干擾模型。
但是,該解決方案還需要一種方法來存儲路徑到_modelInst
內的字段。
是否有任何其他(更爲簡單)的方式來實現這一目標?
我誤解了MVVM的原理嗎?
MVVM是否適合處理大型分層數據結構?
假設顧客作爲模型對象,創建一個實現的ICommand對象要CustomerViewModel:RetrieveCustomer,CreateCustomer,UpdateCustomer,DeleteCustomer(Customer類型的每次服用參數)。然後,您的視圖應綁定到這些ICommand對象,併發送一個類型爲Customer的CommandParameter(很可能是視圖中某處的綁定)。 – 2011-06-07 20:57:13
這適用於平面結構,例如客戶列表。但是如果我有一個更復雜的樹層次結構,比如'list contacts',其中'contact'是'business,customer,private'的基類,'business'有一個'list '......? –
2011-06-08 07:29:42
每個模型都有一個單獨的ViewModel,是嗎?對於派生類,您可以嘗試「Business business = contact as Business」;如果(business!= null)[做與商業相關的東西]' – 2011-06-08 16:03:15