INotifyPropertyChanged不适用于XML序列化
|
我有一个绑定到集合的DataGridView。集合中的类型实现INotifyPropertyChanged(来自MSDN页面的教科书实现)。
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string name)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
public string Name
{
get { return m_Name; }
set { m_Name = value; NotifyPropertyChanged(\"Name\"); }
}
我试图了解何时,如何以及为何触发PropertyChanged事件。如果我编写代码使用Name属性更改字符串,则一切正常,PropertyChanged为!= NULL,并且DataGridView正确更新。像这样:
for (int i = 0; i < Server.Customers.Count; i++)
{
Server.Customers[i].Name = Server.Customers[i].Name + \"!!\";
}
那只是一个测试,但是,该集合真正更新的方式是通过XML反序列化。序列化器的实现非常简单,并且代码逐步遍历与上一个示例完全相同的Name属性(调用NotifyPropertyChanged)。有一个区别:PropertyChanged原来是NULL,并且从不被调用。结果:我的数据绑定没有更新。
我不太了解这里发生了什么。首先,我从来没有明确地订阅PropertyChanged(我发现的任何代码示例也都没有),但是在第一个示例中却正确地调用了它。在第二个示例中,如何将XML反序列化为对象,如何使它起作用?
没有找到相关结果
已邀请:
3 个回复
泉秘胁
的处理程序,因此不会触发该事件。 监听正在创建的对象的“ 2”事件没有任何意义。您到底想做什么?
骚瓤
,则绝对应该采用其他方法反序列化对象。您可以使用实例方法如
或
。创建一个对象,订阅subscribe2ѭ事件,然后在现有对象上调用
。因此,您将收到有关更改的通知,并使现有对象保持活动状态。在这里,您可以通过以下方式实现整个过程:
我还要修改
方法,以便在属性值未更改时不会触发。
抵舵