2011-12-12 22 views
19

Bir string özelliği ve bir List özelliği ile basit bir sınıfa sahibim ve INofityPropertyChanged olayına sahip oldum, ancak bir .Add dizisine eklediğimde bu olayın içine tıklanmam. ListView vurulmadı. Mülkün değiştirilmiş bir liste için isabet etmediğini tahmin ediyorum .... bu özellik değişmiş olay isabet almak için nasıl bunu uygulayabilirim ???Liste <string> INotifyPropertyChanged event

Başka türde bir koleksiyon kullanmam gerekiyor mu?

Yardımlarınız için teşekkürler!

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

cevap

32

bir göz olmalıdır. Ve sizin durumunuzda _includeFolders'u hazırlayacağım - her zaman koleksiyonun bir örneği ile çalışabilirsiniz.

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

Bu para! Teşekkürler! – theDoke

+0

** Neden 'ObservableCollection' kullanılmalıdır? – C4u

+0

@ C4u WPF'de veri bağlamada kullanılabilir (MVVM modeli) – bniwredyc

2

Kişisel Liste sizin için otomatik NotifyPropertyChanged olay yangın gitmiyor. WPF dair bir ItemsSource özelliği göstermiyor kontrolleri

ürün eklendiğinde veya kaldırıldığında otomatik olacak güncelleme bir ObservableCollection<T>, bağlı üzere tasarlanmıştır.

7

WPF'nin liste bağlama işini yapmanın en kolay yolu, INotifyCollectionChanged'u uygulayan bir koleksiyon kullanmaktır. Burada yapılacak basit bir şey, listenizi bir ObservableCollection ile değiştirmek veya uyarlamaktır.

ObservableCollection kullanırsanız, listeyi değiştirdiğinizde, WPF bağının güncellenmesini söyleyen bir olay olan CollectionChanged olayını yükseltir. Gerçek koleksiyon nesnesini değiştirirseniz, gerçek koleksiyon özelliği için propertychanged etkinliğini yükseltmek isteyeceğinizi unutmayın.

+0

Performans nedenleriyle kullanmak istemezsem ne olur? – Brandon

İlgili konular