gpt4 book ai didi

c# - ObservableCollection<> CollectionChanged 未触发

转载 作者:太空宇宙 更新时间:2023-11-03 17:49:36 25 4
gpt4 key购买 nike

我在 WPF 应用程序中有一个数据网格,它像这样绑定(bind)到 ObservableCollection

<DataGrid ItemsSource="{Binding Spring.SpringData, Mode=OneWay}" />

我的数据显示正常,我可以编辑网格中的数据,但是当我手动编辑网格中的数据时,它不会触发 PublishSpringChange 事件。基础数据发生变化,但事件没有触发,我错过了什么?

使用具有以下内容的 Spring 模型
public class Spring : INotifyPropertyChanged
{

private ObservableCollection<SpringData> _SpringData;

public ObservableCollection<SpringData> SpringData
{
get { return _SpringData; }
}

public Spring()
{
....

_SpringData = new ObservableCollection<SpringData>();
SpringData.CollectionChanged += PublishSpringChange;

...
}
private void PublishSpringChange(object sender, NotifyCollectionChangedEventArgs e)
{
// Code that does not run!
}
}

使用 SpringData 类
public class SpringData: BindableBase
{
private double _force;
private double _displacement;

public SpringData(double displacement, double force)
{
Displacement = displacement;
Force = force;
}

public double Displacement
{
get { return _displacement; }
set { SetProperty(ref _displacement, value); }
}

public double Force
{
get { return _force; }
set { SetProperty(ref _force, value); }
}
}

最佳答案

INotifyCollectionChanged仅在您实际修改集合时触发。这是当您添加、删除、移动、替换或重置集合中的项目时。当 SpringData 中的属性之一时,它不会触发。对象变了。

为了监听 SpringData 对象的变化,假设它实现了 INotifyPropertyChanged ,您需要将监听器连接到 PropertyChanged每个项目的事件。

关于c# - ObservableCollection<> CollectionChanged 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36507584/

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