У меня есть 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 в объект?