【发布时间】:2011-04-17 22:26:15
【问题描述】:
我有一个绑定到集合的 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 反序列化到对象中的第二个示例中,如何让它工作?
【问题讨论】:
-
你能发布 xaml 吗?你在哪里绑定?
标签: c# xml serialization inotifypropertychanged xmlserializer