1

GridView(複数列)レイアウトのListViewがあります。一部の列には、現在のロケールを使用して数値を修飾したり、UNIXタイムスタンプを日時文字列に変換したり、列挙型をローカライズされた説明に変換したりするコンバーターがあります。

ロケールは実行時に変更される可能性があるため、これらのコンバーターを再実行する方法が必要です。バインディングの値自体は変更されていませんが、コンバーターの出力はロケールによって異なる場合があることに注意してください。

そうするための最良の方法は何ですか?影響を受けるすべてのリストのコレクション全体を繰り返して、OnPropertyChangedを呼び出したくありません。ListViewにすべてのバインディングを強制的に更新させる方法、または一部の列のバインディングのみを更新する方法はありますか?

4

2 に答える 2

2

私は答えを見つけました:

ICollectionView view = CollectionViewSource.GetDefaultView(MyListView.ItemsSource);
view.Refresh();
于 2013-01-31T09:03:59.310 に答える
0

次のようにして、ListView に ItemsSource バインディングを強制的に更新させることができます。

lview.GetBindingExpression(ListView.ItemsSourceProperty).UpdateTarget();

この同じ構文を使用すると、確かにより具体的になり、特定の列のバインディングのみを強制的に更新できますが、ListView の行数によっては、パフォーマンスの違いが見られない場合があります。

于 2013-01-30T22:30:01.050 に答える