gpt4 book ai didi

c# - 绑定(bind)到 ObservableCollection 中的项目字段的总数,并在值更改时更新

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

我有一个在 WPF 中填充数据网格的 ObservableCollection。我需要绑定(bind)到“小时”列的总数,并在“小时”列中的值更改时更新该总数。我可以通过监听“LostFocus”事件并运行一个函数来实现这一点,但想尝试绑定(bind)。

我遇到的问题是,当集合中的 items 属性发生更改时,NotifyPropertyChanged 事件将不会触发。

出击类 NotifyPropertyChanged 将触发,但集合不会将其解释为它自己的属性更改。如何从任务类的集合中收听出击 PropertyChanged?

我的模特

public class Mission : INotifyPropertyChanged
{
private ObservableCollection<Sortie> sorties;
public ObservableCollection<Sortie> Sorties
{
get { return this.sorties; }
set
{

if (this.sorties != value)
{
this.sorties = value;
this.NotifyPropertyChanged("Sorties");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
}

public class Sortie : INotifyPropertyChanged
{
private double hours;
public double Hours
{
get {return this.hours;}
set
{
if (this.hours != value)
{
this.hours = value;
this.NotifyPropertyChanged("Hours");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
}

我没有费心发布我的 XAML 或 View 模型,因为我相信一旦我学会了如何触发集合的 PropertyChanged 事件,我就可以解决这个问题,并且我想让你不必阅读大量代码。但是,如果您认为需要它,请告诉我。

最佳答案

在计算值的父 View 模型中写入只读属性。

public double SortieHours => Sorties.Sum(x => x.Hours);

父 View 模型句柄 PropertyChanged Sorties 中的每个项目, 和 CollectionChangedSorties .在 CollectionChangedSorties ,您必须添加/删除 PropertyChanged来自 Sortie 的处理程序添加和删​​除实例。当你得到一个新的 Sorties集合(出于这个原因,您可能希望将该 setter 设为私有(private)),您需要扔掉所有旧的处理程序并添加新的处理程序。

现在,每当一个 Sortie添加或删除,或其 Hours改变,或者有人给你一个新的 Sorties收藏、养 PropertyChanged :
OnPropertyChanged(nameof(SortieHours));

并将该属性绑定(bind)到 XAML 中您喜欢的任何内容。

这看起来很可怕(因为它是),但你还要做什么?

很多人会建议你给 Sortie一个 HoursChanged事件。 PropertyChanged这种情况很烦人,因为它可能会针对多个不同的属性引发,您必须检查哪一个。这是一个神奇的字符串。

以上是C#6。对于 C#5,
public double SortieHours { get { return Sorties.Sum(x => x.Hours); } }

OnPropertyChanged("SortieHours");

关于c# - 绑定(bind)到 ObservableCollection 中的项目字段的总数,并在值更改时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39257530/

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