簡體   English   中英

在分層數據結構中向MVVM添加編輯

[英]Add editing to MVVM in a hierarchical data structure

這個問題是這個舊問題的后續問題,它更像是一個確認而不是一個開放的問題。

我的ViewModel實例有一個Model的私有實例_modelInst
ViewModel在編輯期間可以獨占訪問Model的數據(因此Model不需要實現INotifyPropertyChanged)。

現在我有三種方法可以從視圖中編輯模型數據:

  1. 直接在Model實例上獲取/設置
    例如,對於簡單的值字段
    return _modelInst.fieldname;
    _modelInst.fieldname = value;
    這個很容易實現......

  2. 創建ViewModel實例並對父數據結構進行操作
    例如,對於更復雜的對象類型,如結構

    • 為該類型創建新的ViewModel。
      ViewModel知道父級及其fieldname。
    • 在ContentControl + DataTemplate中顯示它
    • 獲取/設置:
      通過使用fieldname作為參數的父方法,
      即使只更改了一個字段,也會覆蓋整個原始對象

    這意味着為每個結構創建一個由父項實現的新接口(使用_modelInst上的更新例程)。

  3. 創建ViewModel實例,而不直接了解父數據結構
    例如,用於父類中的(列表)類

    • 為每個類創建一個新的ViewModel

    • 通過以下方式向父級發送更新說明

      1. 命令
      2. 消息
      3. 反射(父親知道哪個孩子稱之為功能
        通過比較實例與所有存儲的子節點)

      所有這些都是一個很大的混亂實現,為可編輯的模型的每個領域創建功能。
      這幾乎意味着模型的所有領域..​​....

(4.)可以創建一個通用的ViewModel,它只通過反射工作,其中每個子對象都知道它的父對象和它的字段名(+ index,如果在列表中)。
只有root的邏輯才會干擾模型。
但是該解決方案還需要一種方法來存儲_modelInst字段的路徑。

有沒有其他(更簡單)的方法來實現這一目標?
我是否(再次)誤解了MVVM的原理?
MVVM是否適合處理大型分層數據結構?

希望這些資源有所幫助; 當我學習MVVM以及如何使用視圖模型表示對象圖/層次結構時,他們幫助了我很多:

  1. 可編輯對象適配器
  2. 可編輯的集合適配器
  3. 微觀模型

這是一個很好的問題,我覺得MVC模式沒有一個好的答案。

ViewModels映射到的模型沒有子項時效果很好。

但是,當模型有孩子時,就像在

顧客

        -->Order

        -->Country

(想象國家是客戶的兒童對象)設計模式的類型分解。

我發現最好的事情是使用繼承並有選擇地只暴露那些你需要viewmodel邏輯的子代。 否則,只需訪問將通過繼承進入的視圖的模型屬性。

公共類CustomerView:客戶//繼承自Customer(model){

public CustomerView(Customer customer)
{
      this.FirstName = customer.FirstName
      //etc..

      //Only if you need it, that is if you have some display-specific
      //logic relating to country for a given view, you create
      //a CountryView class that inherits from Country and gets populated
      //by an instance of it as well
      this.CountryView = new CountryView(customer.Country)
}

public CountryView CountryView {get;set;} //sadly you cannot override Country but you may be able to shadow it.

public string DisplayColor
{
    if(base.FirstName == "Joe")
    {
        return "red";
    }
    return "";
}

}

與孫子女打交道時,這會變得混亂。 如果有人有更好的解決方案,我很樂意聽到。

謝謝

暫無
暫無

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

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