PropertyChanged事件不适用于通过收益创建的集合
为什么不能运行下面的代码?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 )从UI更改应该引发事件PropertyChanged,但此事件为空。
(列表框在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不注册并为空,当我通过使用通用列表创建集合事件工作正常? 感谢您的回答。
您需要实现enumerable。使用您当前的代码,每次枚举枚举时都会运行foreach循环,每次创建新的对象ExportSetting
。
修复:
sequencesToExport = FillSequencesSetting(sequences).ToArray();
或者:
sequencesToExport = FillSequencesSetting(sequences);
private IEnumerable<ExportSetting> FillSequencesSetting(List<MTFSequence> sequences)
{
return sequences.Select(x => new ExportSetting(x.Id, x.Name, true)).ToArray();
}
你错过通知时SequencesToExport
属性改变:
public bool Export
{
get { return export; }
set
{
export = value;
NotifyPropertyChanged();
NotifyPropertyChanged(nameof(SequencesToExport));
}
}
通知应该是正确的,因为当我使用列表
这是不正确的。 “SequencesToExport”不是“Export”属性的类的属性。 –
谢谢!我用第一个解决方案,它的工作原理 – David