2012-01-19 4 views
0

私はNameValueというプロパティを持つ単純なクラスで、ビューモデルの観測可能なコレクションにバインドされているListBoxがあるとします。シルバー:INPCを経由してコレクションにバインディングの更新を強制することはできませんか?

ビューモデルコレクションから項目を追加または削除すると、ListBoxは自動的に更新されます。

ただし、データ項目の名前を変更すると、ListBoxも更新したいので、コード内の名前を更新した後にobservableコレクションを公開するビューモデルプロパティのプロパティ変更を行います。 ListBoxは更新されません。結合がうまく、あなたが私を与えているオブジェクト(コレクション自体は)私が持っていた最後のものと同じであるので、それは本当に変わっていない、と言っているかのように

それはだ、それを持っていますか?愚かなプログラマー、私がする必要がないときに私にリフレッシュするように言って!

私はこの問題を回避することが分かってきた方法の唯一のカップルがあります。

  • はコレクション自体からの明示的なリセット通知が(これを実行するためのObservableCollectionのサブクラスが必要です)上げ
  • は、リストを再作成します新しい観測可能なコレクションを使用してプロパティの変更を呼び出す - コレクションオブジェクトが異なるので、バインディングの更新が行われます。

この2つの方法のどちらも理想的ではありませんが、リストボックスを更新するのは難しくありません!

バインディングはこのように動作する理由、および結合は関係なく、常にソースが変更されたかどうかのか、プロパティ変更通知に更新するように?動作を変更するにはどのような方法があるかどうか、誰が説明することができますか

答えて

1

あなたObservableCollection内のアイテムがINotifyPropertyChangedを実装しないようにそれは私に聞こえます。コレクション内の項目のNameプロパティを変更すると、UIが更新されるように、これを行う必要があります。あなたの説明から、フレームワークとバインドされたコレクションは、必要と同じように機能しています。

+0

ああ、もちろん - 私はそれが単純なものになると思った。 – Sam

関連する問題