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

Pass value from child model to parent model in MVVM

我正在编写具有 2 个模型的 MVVM C#​​ WPF 软件。我正在使用 Caliburn.Micro 仅供参考。

父模型:

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)

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