C# 列表<;字符串>;INotifyPropertyChanged事件
我有一个带有string属性和List属性的简单类,并且实现了INofityPropertyChanged事件,但是当我执行.Add到string列表时,不会命中此事件,因此不会命中要在ListView中显示的转换器。我猜更改的属性不会被添加到列表中…我如何实现这一点以使属性更改事件命中 我需要使用其他类型的收藏吗 谢谢你的帮助C# 列表<;字符串>;INotifyPropertyChanged事件,c#,wpf,inotifypropertychanged,propertychanged,C#,Wpf,Inotifypropertychanged,Propertychanged,我有一个带有string属性和List属性的简单类,并且实现了INofityPropertyChanged事件,但是当我执行.Add到string列表时,不会命中此事件,因此不会命中要在ListView中显示的转换器。我猜更改的属性不会被添加到列表中…我如何实现这一点以使属性更改事件命中 我需要使用其他类型的收藏吗 谢谢你的帮助 namespace SVNQuickOpen.Configuration { public class DatabaseRecord : INotifyProp
namespace SVNQuickOpen.Configuration
{
public class DatabaseRecord : INotifyPropertyChanged
{
public DatabaseRecord()
{
IncludeFolders = new List<string>();
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
protected void Notify(string propName)
{
if (this.PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
#endregion
private string _name;
public string Name
{
get { return _name; }
set
{
this._name = value;
Notify("Name");
}
}
private List<string> _includeFolders;
public List<string> IncludeFolders
{
get { return _includeFolders; }
set
{
this._includeFolders = value;
Notify("IncludeFolders");
}
}
}
}
namespace svnquickkopen.Configuration
{
公共类数据库记录:INotifyPropertyChanged
{
公共数据库记录()
{
IncludeFolders=新列表();
}
#区域INotifyProperty更改成员
公共事件属性更改事件处理程序属性更改;
受保护的void Notify(字符串propName)
{
if(this.PropertyChanged!=null)
{
PropertyChanged(这是新PropertyChangedEventArgs(propName));
}
}
#端区
私有字符串\u名称;
公共字符串名
{
获取{return\u name;}
设置
{
这个._name=value;
通知(“名称”);
}
}
私人名单(包括文件夹);;
公共列表包括文件夹
{
获取{return\u includeFolders;}
设置
{
此项。_includeFolders=值;
通知(“包括订户”);
}
}
}
}
您的列表不会自动为您触发NotifyPropertyChanged事件
公开
项资源
属性的WPF控件被设计为绑定到可观察集合
,该集合在添加或删除项时将自动更新。使WPF的列表绑定工作的最简单方法是使用实现INotifyCollectionChanged
的集合。这里要做的一件简单的事情就是用一个
如果您使用
observateCollection
,那么每当您修改列表时,它都会引发CollectionChanged事件,该事件将通知WPF绑定进行更新。请注意,如果您调出实际集合对象,您将希望引发实际集合属性的propertychanged事件。您应该查看您应该使用ObservableCollection
而不是List
,因为与List
不同,ObservableCollection
将在其内容更改时通知家属
在您的情况下,我会将\u includeFolders
设置为只读-您始终可以使用该集合的一个实例
public class DatabaseRecord : INotifyPropertyChanged
{
private readonly ObservableCollection<string> _includeFolders;
public ObservableCollection<string> IncludeFolders
{
get { return _includeFolders; }
}
public DatabaseRecord()
{
_includeFolders = new ObservableCollection<string>();
_includeFolders.CollectionChanged += IncludeFolders_CollectionChanged;
}
private void IncludeFolders_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
Notify("IncludeFolders");
}
...
}
公共类数据库记录:INotifyPropertyChanged
{
私有只读可观察收集(包括文件夹);
公众可观察到的集合,包括文件夹
{
获取{return\u includeFolders;}
}
公共数据库记录()
{
_includeFolders=新的ObservableCollection();
_includeFolders.CollectionChanged+=includeFolders\u CollectionChanged;
}
私有void IncludeFolders\u CollectionChanged(对象发送方,NotifyCollectionChangedEventArgs e)
{
通知(“包括订户”);
}
...
}
为什么要使用ObservableCollection
?@C4u它可以用于WPF(MVVM模式)中的数据绑定