C# 列表<;字符串>;INotifyPropertyChanged事件

C# 列表<;字符串>;INotifyPropertyChanged事件,c#,wpf,inotifypropertychanged,propertychanged,C#,Wpf,Inotifypropertychanged,Propertychanged,我有一个带有string属性和List属性的简单类,并且实现了INofityPropertyChanged事件,但是当我执行.Add到string列表时,不会命中此事件,因此不会命中要在ListView中显示的转换器。我猜更改的属性不会被添加到列表中…我如何实现这一点以使属性更改事件命中 我需要使用其他类型的收藏吗 谢谢你的帮助 namespace SVNQuickOpen.Configuration { public class DatabaseRecord : INotifyProp

我有一个带有string属性和List属性的简单类,并且实现了INofityPropertyChanged事件,但是当我执行.Add到string列表时,不会命中此事件,因此不会命中要在ListView中显示的转换器。我猜更改的属性不会被添加到列表中…我如何实现这一点以使属性更改事件命中

我需要使用其他类型的收藏吗

谢谢你的帮助

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模式)中的数据绑定