gpt4 book ai didi

c# - 使用 INotifyPropertyChanged 更新 ObservableCollection 项目属性

转载 作者:太空狗 更新时间:2023-10-30 01:26:26 24 4
gpt4 key购买 nike

检查以确保我的假设是正确的。

我有一个 ObservableCollection 类。我正在调用 Web 服务并检索一组设备。然后我枚举 ObservableCollection 并将每个项目设置为从 Web 服务检索到的相应设备。我检索到的设备与 ObservableCollection 中的项目具有不同的属性值,但未触发 PropertyChanged 事件。

我假设这是 ByDesign,为了触发 PropertyChanged 事件,我实际上必须枚举每个属性并设置值?

例如,在下面的例子中,任何 Device 类属性都不会触发 PropertyChanged 事件。

ObservableCollection<Device> Items = new ObservableCollection<Device>();
Items = LoadItems();

List<Device> devices = GetDevices();

foreach (var item in Items)
{
var currentDevice = devices.Single(d1 => d1.ID == item.ID);
item = currentDevice;
}

但是,如果我手动更新每个属性,我就在做生意:

ObservableCollection<Device> Items = new ObservableCollection<Device>();
Items = LoadItems();

List<Device> devices = GetDevices();

foreach (var item in Items)
{
var currentDevice = devices.Single(d1 => d1.ID == item.ID);
item.Latitude = currentDevice.Latitude;
item.Longitude= currentDevice.Longitude;
}

在上面的例子中,Latitude 和 Longitude 都触发了它们的事件。

由于我的类(class)有一堆属性,是否有比一个一个地执行此操作更好的方法?

最佳答案

在第一个示例中,设置集合中的项目将触发 CollectionChanged 事件,而不是单个项目的 PropertyChanged 事件。

您可以通过为 PropertyChanged 事件指定一个空字符串来通知所有属性。例如:

item.RaisePropertyChanged("");

其中 RaisePropertyChanged 是调用 INotifyPropertyChanged 实现的 PropertyChanged 事件的公共(public)方法。

关于c# - 使用 INotifyPropertyChanged 更新 ObservableCollection 项目属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4929763/

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