2011-12-12 11 views
19

文字列プロパティとListプロパティを持つ単純なクラスがあり、INofityPropertyChangedイベントが実装されていますが、文字列リストに.Addを実行するとこのイベントはヒットしないため、 ListViewはヒットしません。変更されたプロパティは、リストに追加するためにヒットしていないと推測しています....どうやってこのプロパティを変更してイベントをヒットさせることができますか?リスト<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

を見ている必要があります。あなたの場合は_includeFoldersを読み取り専用にします。コレクションの1つのインスタンスで常に作業できます。

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を使用すると、リストを変更するたびに、WPFバインディングに更新を知らせるイベントであるCollectionChangedイベントが発生します。実際のコレクションオブジェクトをスワップアウトすると、実際のコレクションプロパティのpropertychangedイベントを発生させることになります。

+0

性能上の理由からこれを使用したくない場合はどうすればよいですか? – Brandon

1

あなたがObservableCollection<string>代わりのList<string>を使用する必要がありますObservableCollection

関連する問題