【发布时间】:2011-02-14 11:53:43
【问题描述】:
检查以确保我的假设是正确的。
我有一个 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;
}
在上面的例子中,纬度和经度都会触发它们的事件。
由于我的班级有很多属性,有没有比一个一个更好的方法来做到这一点?
【问题讨论】:
标签: c# silverlight windows-phone-7