【问题标题】:List<string> INotifyPropertyChanged eventList<string> INotifyPropertyChanged 事件
【发布时间】:2012-01-18 04:45:23
【问题描述】:

我有一个带有字符串属性和 List 属性的简单类,并且我实现了 INofityPropertyChanged 事件,但是当我执行 .Add 到字符串 List 时,该事件没有被命中,所以我的 Converter 在 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");
            }
        }
    }
}

【问题讨论】:

    标签: c# wpf inotifypropertychanged propertychanged


    【解决方案1】:

    您应该使用ObservableCollection&lt;string&gt; 而不是List&lt;string&gt;,因为与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");
        }
    
        ...
    
    }
    

    【讨论】:

    • 为什么应该使用ObservableCollection
    • @C4u 可用于 WPF 中的数据绑定(MVVM 模式)
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您的列表不会自动为您触发 NotifyPropertyChanged 事件。

      公开ItemsSource 属性的WPF 控件旨在绑定到ObservableCollection&lt;T&gt;,当添加或删除项目时,该ObservableCollection&lt;T&gt;自动更新。

      【讨论】:

        【解决方案4】:

        你应该看看ObservableCollection

        【讨论】:

          猜你喜欢
          • 2012-10-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-21
          • 2022-06-27
          • 2011-04-10
          • 2011-10-05
          相关资源
          最近更新 更多