将值从子模型传递到 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 更愿意做上面的选项 1)
使用 ObservableCollection 而不是 List<> 因为:
- 它有一个 CollectionChanged 事件,您可以使用它在每次添加/删除新项目时重新计算数量。
- 它实现了 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; }
我正在编写具有 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 更愿意做上面的选项 1)
使用 ObservableCollection 而不是 List<> 因为:
- 它有一个 CollectionChanged 事件,您可以使用它在每次添加/删除新项目时重新计算数量。
- 它实现了 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; }