2014-02-23 26 views
1

我正在使用MVVM模式的Windows Phone應用程序。總之,我有一個綁定到課堂的名單。該類包含一個可觀察的集合,用於存儲每個單獨行的信息。避免孩子類中的數據重複mvvm

當只需要在父類中設置特定數據的一個實例時,是否有避免在子類中重複數據的方法?想想以下情景:

電網 - 表名 - 行

如前所述,行屬性是可觀察集合即的ObservableCollection其中行是由許多屬性,如編號,編號的一類,名稱等..

此觀察的集合被綁定到一個列表,每行的視圖模型具有綁定到一個ICommand它,因此當它被點擊,它會觸發一個事件,我將能夠重定向動作到另一個頁面,但我將能夠使用該行的信息,即Id,Code等...

問題是我需要訪問TableName,雖然我可以將它作爲行的類屬性之一包含,但它似乎毫無意義,因爲這將是同一個值。

這是什麼設計的正確方法?是否有適用於此場景的特定模式,或僅僅是複製每行中的數據的情況......它只是感覺不對!

謝謝。

T.

回答

1

你爲什麼不建立在TableNameVMICommand,它被傳遞給每一個孩子RowVM公開爲一個簡單的屬性。如果執行TableNameVM內部的命令需要Row,那麼只需將它作爲命令參數傳遞即可。

您甚至可以放棄將RowVM添加到RowVM,而只是使用行綁定上的RelativeSource來綁定到TableName。但是,我必須承認,我不喜歡這種看法上的簡短切割。

事情是這樣的:

public class TableNameVM : ViewModelBase 
{ 
    private readonly ICommand myCommand; 

    public ObservableCollection<RowVM> Rows { get; set; } 

    public TableNameVM() 
    { 
     this.myCommand = new DelegateCommand<RowVM>(ExecuteMyCommand); 

     //create 10 rows 
     for(int n = 1; n < 10; n++) 
      this.Rows.Add(new RowVM(this.myCommand)); 
    } 

    private void ExecuteMyCommand(RowVM row) 
    { 
     //do whatever 
    } 
} 

public class RowVM : ViewModelBase 
{ 
    public ICommand MyCommand { get; private set; } 

    public RowVM(ICommand myCommand) 
    { 
     this.MyCommand = myCommand; 
    } 
} 

你行按鈕來觸發命令看起來是這樣的:

<Button Command="{Binding MyCommand}" CommandParam="{Binding}" /> 
+0

你好,對不起還在學習MVVM。通過在TableNameVM中添加ICommand,我明白你的意思,但是你的意思是「它被傳遞給每個子RowVM作爲一個簡單屬性公開」。你能用一個基本的示例代碼來解釋嗎?謝謝。 – Thierry

+0

已經爲您添加了一些示例代碼。 – GazTheDestroyer

+0

謝謝你。我明白你的意思了! :) ......這樣做可以做到這樣嗎? – Thierry