2012-03-20 11 views
0

データベースからデータを取得してコンボボックスに表示し、そのコンボボックスから値を選択して追加/削除ボタンを使用してリストボックスに追加することができます。私はObservableCollectionsを使用して、INotifyPropertyChanged(およびCollectionChanged)を実装しているので、データベース値をComboBoxにバインドすることができますか?申し訳ありませんが、これが基本的な質問であれば、私は約1ヶ月前にWPFを学び始めました。ObservableCollectionでINotifyPropertyChangedを実装する

私はarticle(非常にうまくいっている)をSacha Barberによって読んだことがあります。

そして、私はObservableCollectionのMSDNページを見てきました。

ObservableCollectionListのメリットとデメリットはどれですか(INotifyPropertyChangedは実装されていません)。あなたのコンボボックス内の項目を変更しない場合

答えて

1

手動であなたのListことを通知した場合、その後、Listはおそらく(ObservableCollectionがあまりにもなります)ニーズにOKになります(あなたが追加しないつまり/ /更新項目を削除します)それに影響を与えるとプロパティが変更されました。

public List<X> MyList 
{ 
    get 
    { 
     ... 
    } 

    set 
    { 
     if (... != value) 
     { 
      ... = value; 
      if (this.PropertyChanged != null) 
      { 
       this.PropertyChanged(this, new PropertyChangedEventArgs("MyList")); 
      } 
     } 
    } 
} 

.... 

this.MyList = new List<X> { new X(...), new X(...) }; 

あなたは(this.MyList.Add(...)を使用して、新しいMyListオブジェクトを作成せずにIE)をお使いのコンボボックスに追加/削除または更新項目を計画している場合は、そのコレクションが更新されたときに通知することができることObservableCollectionを使用します(それはすることができますバインディングの更新)。

+0

コンボボックスにバインドされたリストを更新する予定でした。ありがとうございました! 1つの質問:あなたの例では、リストはINotifyPropertyChangedを実装する必要がありますか? すなわちpublicリスト MyList:INotifyPropertyChanged – Ryan

+0

この例では、リスト自体は 'INotifyPropertyChanged'を実装していません。これは、 'List'型のプロパティを含むクラスです。 – ken2k

2

何かお気づきの点があります。

ObservableCollectionのINotifyPropertyChangedの実装と、その実装のオブジェクトを混同しないでください。

ObservableCollection内のオブジェクトの1つのプロパティが変更された場合、そのオブジェクトがINotifyPropertyChangedも実装していない限り、UIに反映されません。 ObservableCollectionがこれを処理するとは思わないでください。

+0

これで、observablecollectionに格納されたいくつかのプロパティを持つカスタムクラスがあった場合、observablecollectionはそのカスタムクラスがINotifyPropertyChangedを実装していない限り、それらのプロパティの1つが変更されたかどうかを知ることができませんでしたか?しかし、観測可能なコレクションがちょうど変わっていない文字列を保持していれば、これは問題ではないでしょうか?ありがとう。 – Ryan

+0

はい、両方のステートメントが正しいです。 – Khan

関連する問題