使用XAML对ListBox中的项目进行排序

时间:2014-12-28 16:13:41

标签: wpf xaml windows-8.1

我有一个带有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?

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进行排序和过滤。