Подтвердить что ты не робот

Создание сортированной коллекции в WinRT

Кто-нибудь пытался создать представление, которое сортирует коллекцию? Интерфейс ICollectionView присутствует, и он утверждает, что имеет те же обязанности, что и его коллега WPF/SL (сортировка, пейджинг, фильтрация), однако, если я ничего не пропустил, нет никакого вида методы/свойства на интерфейсе.

Мне было бы интересно узнать, как взять коллекцию элементов, а затем отсортировать их через представление в WinRT.

Заметьте, я знаю, что могу сделать это вручную, однако я хочу посмотреть, как отсортированная коллекция взаимодействует с переходами темы WinRT, которые, как представляется, добавляют визуальные эффекты при выполнении сортировки.

4b9b3361

Ответ 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>