我的WPF4 DataGrid绑定到一个不可排序的集合 - ObjectResult(of t)。我无法弄清楚如何使用像ListCollectionView这样的可排序集合。
详细信息:当应用程序加载用户时,会启动搜索以填充DataGrid和其他可编辑控件。为了执行搜索,我正在根据用户过滤器选择构建一个ObjectQuery(of t)。 ObjectQuery的Execute方法返回和我设置为CollectionViewSource.Source的ObjectResult。在XAML中,DataGrid绑定到CollectionViewSource,它是我创建的屏幕的DataContext。
System.Data.Objects.ObjectQuery<LabSample> labSamplesQuery = this.GetLabSamplesFiltered_Query(_labEntitiesContext, sampleID_LIKE, xxx_LIKE, yyy_LIKE);
System.Data.Objects.ObjectResult<LabSample> labSamples = labSamplesQuery.Execute(System.Data.Objects.MergeOption.AppendOnly);
_labSamplesCollectionViewSource.Source = labSamples;
因为DataGrid绑定到ObjectResult(of t),所以它不可排序。 如何将我的查询结果(labSamples)转换为可排序的&amp; amp;在将其设置为我的数据源(CollectionViewSource.Source)之前,可更新集合?
答案 0 :(得分:1)
由于延迟加载,WPF DataGrid将无法排序。您需要使用ToList()方法,如下所示: ..... _labSamplesCollectionViewSource.Source = labSamples.ToList();现在datagrid应该是可排序的。
答案 1 :(得分:0)
您可以使用ICollectionView
打包您的收藏,并将其返回到您的绑定DataGrid
。
private ICollectionView _view;
public ICollectionView Samples
{
get
{
if (_view == null)
{
_view = CollectionViewSource.GetDefaultView(new ObservableCollection<LabSample>(labSamples));
_view.SortDescriptions.Add(new SortDescription("PropertyName", ListSortDirection.Ascending));
}
return _view;
}
}
您还可以在XAML中设置排序逻辑。 Bea有一篇关于实现here的文章。如果您将ObservableCollection<LabSamples>
作为类级变量或包含在包含引用的引用的服务中,则您的更改将反映在DataGrid
中。