有没有人去创建一个对集合进行排序的视图? ICollectionView接口存在,它声称与WPF / SL对应(排序,分页,过滤)具有相同的职责,但是,除非我遗漏了某些内容,there are no sort methods / properties on the interface。
我很想知道如何获取一组项目,然后通过WinRT中的视图对它们进行排序。
注意,我知道我可以手动执行此操作,但是,我希望看到排序的集合如何与WinRT主题转换交互,这些转换在执行排序时似乎会添加视觉效果。
答案 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>