У нас есть приложение Silverlight с несколькими списками и comboboxes, которые отображают данные, отсортированные неправильно, что мне нужно исправить. Большинство их свойств ItemSource устанавливаются через XAML. Их DataContext не может быть установлен непосредственно в элементе управления, а вместо этого установлен на родителя. Поэтому я не могу просто пощекотать «OrderBy» в назначении ItemSource или DataContext в коде позади, поскольку это назначение может явно не существовать.Binding ItemsSource для коллекции "proxy". Как получить DataContext?
У меня возникла идея создать «прокси-коллекцию». Коллекция прокси получит исходный ItemSource и выставит отсортированную версию. Я бы тогда быть в состоянии преобразовать это:
<ListBox ItemsSource="{Binding}"/>
в этом:
<ListBox>
<ListBox.ItemsSource>
<my:ProxyCollection Source="{Binding}" SortBy="Name"/>
</ListBox.ItemsSource>
</ListBox>
Не хилые! Но поскольку ProxyCollection не является дочерним элементом ListBox, DataContext ListBox не распространяется на него, и привязка не работает магически. Если я вручную установил DataContext коллекции ProxyCollection, он отлично работает. Но если мне нужно вручную установить DataContext, я могу просто удалить коллекцию прокси и вручную установить DataContext Listbox, добавив «OrderBy».
Итак, любые идеи о том, как я могу автоматически получить DataContext ListBox в коллекции прокси? Или любые другие гениальные идеи?