如何使我的绑定WPF DataGrid可排序?

时间:2011-01-31 15:34:29

标签: wpf entity-framework-4 binding wpfdatagrid

我的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)之前,可更新集合

2 个答案:

答案 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中。