在WinRT中创建排序集合视图

时间:2011-10-04 14:31:30

标签: windows-8 windows-runtime

有没有人去创建一个对集合进行排序的视图? ICollectionView接口存在,它声称与WPF / SL对应(排序,分页,过滤)具有相同的职责,但是,除非我遗漏了某些内容,there are no sort methods / properties on the interface

我很想知道如何获取一组项目,然后通过WinRT中的视图对它们进行排序。

注意,我知道我可以手动执行此操作,但是,我希望看到排序的集合如何与WinRT主题转换交互,这些转换在执行排序时似乎会添加视觉效果。

2 个答案:

答案 0 :(得分:4)

不幸的是,不支持在Win8中对集合视图进行排序(也不支持过滤或分组)。执行此操作的唯一方法是直接操作数据源,然后将其分配给Source属性。

这已被讨论为后Win8时间框架的改进。希望我有更好的消息:)

答案 1 :(得分:2)

Linq似乎是排序和过滤器已经破坏的建议方式。

所以你可以在你的模型中采用这样的东西:

    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));
    }

以您选择的模式将SortByName和SortByAge挂钩到您的UI,并简单地绑定到SortedData属性:

<ItemsControl ItemsSource=”{Binding SortedData}”/>

编辑:参考转换,您会发现此方法将触发您已排序的项目的AddDeleteThemeTransition;只需在ItemsControl中添加类似的内容:

<ItemsControl.ItemContainerTransitions>
    <TransitionCollection>
        <AddDeleteThemeTransition></AddDeleteThemeTransition>
    </TransitionCollection>
</ItemsControl.ItemContainerTransitions>