質問

2つの個別のデータテンプレート(表示用、編集用)を持つWPFリストボックスにバインドされたObservableCollectionのインスタンスがあります。編集用のデータテンプレートには、テキストボックスに一方向のバインディングと[保存]ボタンがあります。

[保存]ボタンを押したときに(リストアイテムを編集モードにした後)、テキストボックスを変更してObservableCollection(および表示)の値を置き換えるために、どのような変更が必要ですか?

役に立ちましたか?

解決

コレクション内のアイテムは、INotifyPropertyChangedインターフェイスを実装するタイプである必要があります。このようにして、リストボックスは、単一アイテムオブジェクトのプロパティ値が変更されたことを通知されます。 ObservableCollectionは、コレクションが変更(アイテムの追加、削除など)された場合にのみCollectionChangedイベントを発生させます

ObservableCollectionに関するMSDNライブラリの記事からの引用

  

データの転送を完全にサポートするには   バインディングソースオブジェクトからの値   バインディングターゲット、各オブジェクト   バインド可能をサポートするコレクション   プロパティは実装する必要があります   適切なプロパティが変更されました   などの通知メカニズム   INotifyPropertyChangedインターフェイス。

他のヒント

バインドされたクライアントとデータソースの間のバインディングで変更通知が発生するには、バインドされたタイプが次のいずれかである必要があります。

  • INotifyPropertyChangedを実装する インターフェース(推奨)。
  • それぞれに変更イベントを提供する バインドされた型のプロパティ。

両方をしないでください。

出典: MSDN:INotifyPropertyChangedインターフェイス

BindingList <!> lt; T <!> gt;を使用して同様の問題を解決しました。クラス。

コレクションと個々のアイテムの変更の両方で発生するListChangedイベントがあります。

.Net 3.5で導入

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top