Создание сортированной коллекции в WinRT
Кто-нибудь пытался создать представление, которое сортирует коллекцию? Интерфейс ICollectionView присутствует, и он утверждает, что имеет те же обязанности, что и его коллега WPF/SL (сортировка, пейджинг, фильтрация), однако, если я ничего не пропустил, нет никакого вида
методы/свойства на интерфейсе.
Мне было бы интересно узнать, как взять коллекцию элементов, а затем отсортировать их через представление в WinRT.
Заметьте, я знаю, что могу сделать это вручную, однако я хочу посмотреть, как отсортированная коллекция взаимодействует с переходами темы WinRT, которые, как представляется, добавляют визуальные эффекты при выполнении сортировки.
Ответы
Ответ 1
К сожалению, нет поддержки для сортировки коллекции в Win8 (ни фильтрации, ни группировки). Единственный способ сделать это - напрямую манипулировать источником данных, а затем назначить ему свойство Source.
Это обсуждалось как улучшение для таймфрейма после Win8. Жаль, что у меня были лучшие новости:)
Ответ 2
Linq кажется предложенным способом, когда Sort и Filter прошли AWOL.
Итак, вы можете принять что-то подобное в своей модели:
private MyDataSourceProvider dataSource;
private ObservableCollection<MyType> sortedDataBackingField;
public ObservableCollection<MyType> SortedData
{
get
{
return sortedDataBackingField;
}
set
{
sortedDataBackingField = value;
NotifyPropertyChanged("SortedData");
}
}
public void SortByName()
{
SortedData = new ObservableCollection<MyType>(dataSource.Entities.OrderBy(
entity => entity.Name));
}
public void SortByAge()
{
SortedData = new ObservableCollection<MyType>(dataSource.Entities.OrderBy(
entity => entity.Age));
}
Hook SortByName и SortByAge до вашего пользовательского интерфейса в выбранном вами шаблоне и просто привязывайтесь к свойству SortedData:
<ItemsControl ItemsSource="{Binding SortedData}"/>
Изменить. Что касается переходов, вы должны обнаружить, что этот подход вызовет AddDeleteThemeTransition для отсортированных вами элементов; просто добавьте что-то вроде этого внутри ItemsControl:
<ItemsControl.ItemContainerTransitions>
<TransitionCollection>
<AddDeleteThemeTransition></AddDeleteThemeTransition>
</TransitionCollection>
</ItemsControl.ItemContainerTransitions>