ObservableCollectionの既存の要素を更新するにはどうすればよいですか?
-
03-07-2019 - |
質問
2つの個別のデータテンプレート(表示用、編集用)を持つWPFリストボックスにバインドされたObservableCollectionのインスタンスがあります。編集用のデータテンプレートには、テキストボックスに一方向のバインディングと[保存]ボタンがあります。
[保存]ボタンを押したときに(リストアイテムを編集モードにした後)、テキストボックスを変更してObservableCollection(および表示)の値を置き換えるために、どのような変更が必要ですか?
解決
コレクション内のアイテムは、INotifyPropertyChangedインターフェイスを実装するタイプである必要があります。このようにして、リストボックスは、単一アイテムオブジェクトのプロパティ値が変更されたことを通知されます。 ObservableCollectionは、コレクションが変更(アイテムの追加、削除など)された場合にのみCollectionChangedイベントを発生させます
ObservableCollectionに関するMSDNライブラリの記事からの引用
データの転送を完全にサポートするには バインディングソースオブジェクトからの値 バインディングターゲット、各オブジェクト バインド可能をサポートするコレクション プロパティは実装する必要があります 適切なプロパティが変更されました などの通知メカニズム INotifyPropertyChangedインターフェイス。
他のヒント
バインドされたクライアントとデータソースの間のバインディングで変更通知が発生するには、バインドされたタイプが次のいずれかである必要があります。
- INotifyPropertyChangedを実装する インターフェース(推奨)。
- それぞれに変更イベントを提供する バインドされた型のプロパティ。
両方をしないでください。
BindingList <!> lt; T <!> gt;を使用して同様の問題を解決しました。クラス。
コレクションと個々のアイテムの変更の両方で発生するListChangedイベントがあります。
.Net 3.5で導入