将值从子模型传递到MVVM中的父模型

时间:2017-07-05 15:03:52

标签: c# mvvm models caliburn.micro

我正在使用2个型号编写MVVM C#WPF软件。我正在使用Caliburn.Micro FYI。

父模型:

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. 时,都会添加它们的每个值
  3. 在项目列表中输入完整的项目列表后计算每个项目值的总和(这意味着如果在以后添加项目,则不会重新计算自己,我对此不太满意1更愿意做上面的选项1)

1 个答案:

答案 0 :(得分:1)

使用ObservableCollection而不是List&lt;&gt;这是因为:

  1. 它有一个CollectionChanged事件,您可以使用它在每次添加/删除新项目时重新计算金额。
  2. 它实现了INotifyCollectionChanged,因此将它绑定到不同的控件没有问题。
  3. 这就是你在案件中使用它的方式:

    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; }