我有一个带有Items的ListBox,我需要对它们进行排序。我知道我可以在DataContext中对数据进行排序,但我想尝试使用XAML来实现它。
我找到了WPF的解决方案:
var view = CollectionViewSource.GetDefaultView(DataContext);
view.SortDescriptions.Clear();
if(_sortField.SelectedValue != null)
view.SortDescriptions.Add(new SortDescription((string)
_sortField.SelectedValue,_ascending.IsChecked == true ?
ListSortDirection.Ascending :
ListSortDirection.Descending));
但我没有CollectionViewSource的GetDefaultView()方法。有没有办法让这个XAML适应Windows 8.1?
答案 0 :(得分:1)
正如您所发现的,CollectionViewSource
在WinRT(Windows 8.1)应用中具有不同的实现。但是ICollectionView
界面。也不同。 WPF ICollectionView支持排序,分组和过滤,而WinRT implementation仅支持分组。
您可以使用此代码获取CollectionView
。
var source = SourceRepository.GetSamples();
var cvs = new CollectionViewSource();
cvs.Source = source;
var view = cvs.View;
this.DataContext = view;
但您无法使用view.SortDescriptions
,因为SortDescriptions
不是类定义的一部分。
当然,您始终可以使用LINQ进行排序和过滤。