2011-12-12 95 views
19

我有一个简单的类与一个字符串属性和List属性,我有INofityPropertyChanged事件实现,但当我做一个.Add添加到字符串列表这个事件没有命中,所以我的转换器显示在ListView没有被击中。我猜属性改变没有命中一个添加到列表....我怎么能实现这个方式来获得该属性更改事件命中?List <string> INotifyPropertyChanged事件

我是否需要使用其他类型的集合?

感谢您的帮助!

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

回答

32

您应该使用ObservableCollection<string>,而不是List<string>。在你的情况下,我只能使_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"); 
    } 

    ... 

} 
+0

这是钱!谢谢! – theDoke

+0

**为什么**应该使用'ObservableCollection'? – C4u

+0

@ C4u它可以用于WPF中的数据绑定(MVVM模式) – bniwredyc

2

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

WPF控制该露出ItemsSource属性被设计成结合到一个ObservableCollection<T>,其更新时自动项目被添加或移除。

7

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

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

+0

如果我不想因性能原因而使用它,该怎么办? – Brandon

相关问题