gpt4 book ai didi

c# - 在 MVVM 中将值从子模型传递给父模型

转载 作者:行者123 更新时间:2023-12-03 10:33:27 24 4
gpt4 key购买 nike

我正在编写具有 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
}
}
}
}

为了发布这个问题,我已经简化了模型。

所以我的问题是:如何让父模型中的总金额通过以下方式自行计算:
  • 每次将 Item 模型的每个值添加到父项的项目列表时都会添加
  • 一旦在项目列表中输入完整的项目列表,计算每个项目值的总和(这意味着如果在以后添加项目,它不会重新计算自己,我对此不太满意,所以 1 会更喜欢执行上述选项 1)
  • 最佳答案

    使用 ObservableCollection 而不是 List<> 因为:

  • 它有一个 CollectionChanged 事件,您可以使用它来重新计算每次添加/删除新项目时的数量。
  • 它实现了 INotifyCollectionChanged,因此您可以毫无问题地将其绑定(bind)到不同的控件。

  • 这是您在您的情况下使用它的方式:
    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; }

    关于c# - 在 MVVM 中将值从子模型传递给父模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44929878/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com