2011-01-31 69 views
0

我的WPF4 DataGrid綁定到一個不可排序的集合 - ObjectResult(of t)。我無法弄清楚如何使用可排序的集合,如ListCollectionView。如何使綁定的WPF DataGrid可排序?

詳細信息:當應用程序加載時,用戶啓動搜索以填充DataGrid和其他可編輯控件。爲了執行搜索,我基於用戶過濾器選項構建了ObjectQuery(of)。 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(t),所以它不可排序。 如何將我的查詢結果(labSamples)分配到可排序的&可更新集合中,然後將其分配爲我的數據源(CollectionViewSource.Source)?

+0

您是否需要將該集合更新? – 2011-01-31 16:00:28

+0

是的。這似乎是這樣一個基本要求 - 用戶搜索數據並將結果轉儲到網格中,以便用戶可以編輯記錄。哪裏有網頁或視頻來學習如何做到這一點?我把亞倫的答覆標記爲接受了一點。他的回答給了我一個ICollectionView作爲DataGrid.ItemsSource的排序網格,但是我的其他控件不再受限制。我希望我的表單的DataContext匹配我用於DataGrid的ItemSource的任何內容。 – DeveloperDan 2011-01-31 16:24:47

回答

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中設置排序邏輯。比衣有一篇關於實現那個here的文章。如果您將ObservableCollection<LabSamples>設置爲級別變量或包含在包含引用的引用的服務中,則您的更改將反映在DataGrid中。

1

由於延期加載,WPF DataGrid不可排序。您需要使用ToList()方法,如下所示: ..... _labSamplesCollectionViewSource.Source = labSamples.ToList();現在datagrid應該是可排序的。