Почему не работает следующий код?Событие PropertyChanged не работает с коллекцией, созданной с помощью урона
У меня есть этот класс:
public class ExportSetting : INotifyPropertyChanged
{
public Guid Guid { get; set; }
public string Name { get; set; }
private bool export;
public bool Export
{
get { return export; }
set
{
export = value;
NotifyPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged([CallerMemberName]string propertyName = null)
{
if (!string.IsNullOrEmpty(propertyName) && PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
И я создал коллекцию с помощью команды выхода:
public IEnumerable<ExportSetting> SequencesToExport
{
get { return sequencesToExport; }
set { sequencesToExport = value; }
}
...
sequencesToExport = FillSequencesSetting(sequences);
private IEnumerable<ExportSetting> FillSequencesSetting(List<MTFSequence> sequences)
{
foreach (var item in sequences)
{
yield return new ExportSetting(item.Id, item.Name, true);
}
}
Когда свойство экспорта (из класса ExportSetting) изменен из пользовательского интерфейса, следует поднять событие PropertyChanged, но это событие равно null.
(ListBox в XAML имеет ItemsSource привязку к собственности SequenceToExport)
Когда я изменил создание коллекции, как это все работает правильно:
private IEnumerable<ExportSetting> FillSequencesSetting(List<MTFSequence> sequences)
{
List<ExportSetting> tmp = new List<ExportSetting>();
foreach (var item in sequences)
{
tmp.Add(new ExportSetting(item.Id, item.Name, true));
}
return tmp;
}
Почему выход команды вызывает событие PropertyChanged не является зарегистрирован и имеет значение null, а когда я создаю коллекцию с помощью общего списка, событие работает правильно? Спасибо за ваши ответы.
Спасибо! Я использовал первое решение, и оно работает! – David