2017-07-05 56 views
1

我正在爲2個模型編寫MVVM C#WPF軟件。我正在使用Caliburn.Micro FYI。將MVVM中的子模型傳遞給父模型

父模型:

namespace Expense_Manager.Models 
{ 
    public class Receipt: PropertyChangedBase 
    { 
     public Receipt() 
     { 
     Items = new List<Item>(); 
     } 
     public List<Item> Items{ get; set; } 
     private double _total; 
     public double Total 
     { 
     get { return _total; } 
     set 
     { 
      _total= value; 
      NotifyOfPropertyChange(() => Total); 
     } 
     } 
    } 
} 

第二種模式:

namespace Expense_Manager.Models 
{ 
    public class Item: PropertyChangedBase 
    { 
     public Item() 
     { } 

     private double _amount; 
     public double Amount 
     { 
     get { return _amount; } 
     set 
     { 
      _amount= value; 
      NotifyOfPropertyChange(() => Amount 
     } 
     } 
    } 
} 

我已經簡化模型張貼這個問題的目的。

所以我的問題是:我怎麼能在父模型總量計算本身或者通過:

  1. 將它添加到父的項目列表
  2. 的項目模型,每次的每個值一旦在物品清單中輸入完整的物品清單,計算每個物品值的總和(這意味着如果物品在以後的日期被添加,它不會重新計算自己,我不太樂意,所以1更喜歡做上面的選項1)

回答

1

使用一個ObservableCollection而不是List <>因爲:

  1. 它,您可以使用每次添加新項目的時間重新計算量的CollectionChanged事件/刪除。
  2. 它實現了INotifyCollectionChanged,所以你將沒有問題將它綁定到不同的控件。

這是你將如何使用它,你在你的情況:

public Receipt() 
{ 
    Items = new ObservableCollection<Item>(); 
    Items.CollectionChanged += Items_CollectionChanged; 
} 

private void Items_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) 
{ 
    Total = Items.Sum(x => x.Amount); 
} 

public ObservableCollection<Item> Items { get; set; } 
+0

你是了不起的!謝謝。它比我想象的更好! –