正しく並べ替えられていないデータを表示する複数のリストボックスとコンボボックスを含む Silverlight アプリケーションがあり、これを修正する必要があります。それらの ItemSource プロパティのほとんどは、XAML を通じて設定されます。それらの DataContext は、コントロールに直接設定されていない可能性があり、代わりに親に設定されていました。したがって、コード ビハインドで ItemSource または DataContext の割り当てに「OrderBy」を簡単に平手打ちすることはできません。その割り当てが明示的に存在しない可能性があるためです。
そこで、「プロキシ」コレクションを作成するというアイデアがありました。プロキシ コレクションは元の ItemSource を取得し、並べ替えられたバージョンを公開します。私はこれを変換することができます:
<ListBox ItemsSource="{Binding}"/>
これに:
<ListBox>
<ListBox.ItemsSource>
<my:ProxyCollection Source="{Binding}" SortBy="Name"/>
</ListBox.ItemsSource>
</ListBox>
汚すぎる格好はやめて!しかし、ProxyCollection は ListBox の子ではないため、ListBox の DataContext はそれに伝達されず、バインディングは魔法のようには機能しません。ProxyCollection コレクションの DataContext を手動で設定すると、うまく機能します。ただし、DataContext を手動で設定する必要がある場合は、プロキシ コレクションを削除し、Listbox の DataContext を手動で設定して、「OrderBy」を追加することもできます。
では、プロキシ コレクションに設定された ListBox の DataContext を自動的に取得する方法についてのアイデアはありますか? または他の天才的なアイデアはありますか?