List <string> INotifyPropertyChanged事件</string>

时间:2011-12-12 04:54:40

标签: c# wpf inotifypropertychanged propertychanged

我有一个带有字符串属性和List属性的简单类,我实现了INofityPropertyChanged事件,但是当我对字符串List执行.Add时,此事件未被命中,因此我在ListView中显示的Converter不是击中。我猜测属性已更改未被添加到列表中....我怎样才能实现此方法以获取该属性更改事件命中???

我是否需要使用其他类型的收藏?!

感谢您的帮助!

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");
            }
        }
    }
}

4 个答案:

答案 0 :(得分:35)

您应该使用ObservableCollection<string>代替List<string>,因为与List不同,ObservableCollection会在内容发生变化时通知家属。

在你的情况下,我只能_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");
    }

    ...

}

答案 1 :(得分:7)

使WPF的列表绑定工作的最简单方法是使用实​​现INotifyCollectionChanged的集合。这里要做的一件简单的事情就是使用ObservableCollection替换或修改您的列表。

如果您使用ObservableCollection,那么每当您修改列表时,它都会引发CollectionChanged事件 - 这个事件将告诉WPF绑定更新。请注意,如果换出实际的集合对象,则需要为实际的集合属性引发propertychanged事件。

答案 2 :(得分:2)

您的列表不会自动为您激活NotifyPropertyChanged事件。

公开ItemsSource属性的WPF控件旨在绑定到ObservableCollection<T>在添加或删除项目时自动更新。

答案 3 :(得分:1)

您应该查看ObservableCollection