Как я могу сделать свою связанную WPF DataGrid сортируемой? - PullRequest
0 голосов
/ 31 января 2011

Мой WPF4 DataGrid связан с несортируемой коллекцией - ObjectResult (of t). Я не могу понять, как вместо этого использовать сортируемую коллекцию, такую ​​как ListCollectionView.

Подробности: Когда приложение загружается, пользователь запускает поиск, чтобы заполнить DataGrid и другие редактируемые элементы управления. Чтобы выполнить поиск, я строю ObjectQuery (из t) на основе выбора фильтров пользователей. Метод Execute ObjectQuery возвращает и ObjectResult, который я установил в качестве моего CollectionViewSource.Source. В 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)?

Ответы [ 2 ]

1 голос
/ 18 мая 2012

WPF DataGrid не будет сортироваться из-за отложенной загрузки.Вам необходимо использовать метод ToList () следующим образом: ..... _labSamplesCollectionViewSource.Source = labSamples.ToList ();Теперь сетка данных должна быть сортируемой.

0 голосов
/ 31 января 2011

Вы можете обернуть свою коллекцию 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 есть статья о достижении этого здесь . Если вы сделаете ObservableCollection<LabSamples> переменную уровня класса или содержится в службе, удерживающей упакованную ссылку, ваши изменения будут отражены в DataGrid.

...