gpt4 book ai didi

c# - 当集合中的属性更改时收到通知

转载 作者:行者123 更新时间:2023-11-30 20:04:08 24 4
gpt4 key购买 nike

我有一个 ObservableCollection<CustomClass> . CustomClass 有几个属性。其中之一叫做Name并且是字符串类型。整个事情都绑定(bind)到 WPF 数据网格。现在我需要在集合中任何成员的名称更改时得到通知。 CollectionChanged集合的事件没有被触发。我可以实现 INotifyPropertyChanged但是我在哪里听呢?

最佳答案

初始答案

您确实需要在您的自定义类上实现 INotifyPropertyChanged,并且您需要订阅集合中所有对象的 PropertyChanged 事件。如果某个属性已更新,您将收到有关该单个对象更改的通知。

更新

如果您想查看旧值和新值是什么,则需要创建自己的 PropertyChanged 事件(可以将其命名为 PropertyUpdated 以防止混淆哪个是哪个)。像下面这样的东西。如果您实现此事件(如自定义类所示),并使用此事件而不是 INotifyPropertyChanged,则您可以在处理事件时访问事件参数中已更新属性的旧值和新值。

public class PropertyUpdatedEventArgs: PropertyChangedEventArgs {
public PropertyUpdatedEventArgs(string propertyName, object oldValue, object newValue): base(propertyName) {
OldValue = oldValue;
NewValue = newValue;
}

public object OldValue { get; private set; }
public object NewValue { get; private set; }
}

public interface INotifyPropertyUpdated {
event EventHandler<PropertyUpdatedEventArgs> PropertyUpdated;
}

public MyCustomClass: INotifyPropertyUpdated {
#region INotifyPropertyUpdated members

public event EventHandler<PropertyUpdatedEventArgs> PropertyUpdated;

private void OnPropertyUpdated (string propertyName, object oldValue, object newValue) {
var propertyUpdated = PropertyUpdated;
if (propertyUpdated != null) {
propertyUpdated(this, new PropertyUpdatedEventArgs(propertyName, oldValue, newValue));
}
}

#endregion
#region Properties

private int _someValue;
public int SomeValue {
get { return _someValue; }
set {
if (_someValue != value) {
var oldValue = _someValue;
_someValue = value;
OnPropertyUpdated("SomeValue", oldValue, SomeValue);
}
}
}

#endregion
}

关于c# - 当集合中的属性更改时收到通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13398287/

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