Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как сделать мой связанный WPF DataGrid сортируемым?

Автор вопроса: DeveloperDanОтветов: 2

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

Подробности. Когда приложение загружается, пользователь инициирует поиск, чтобы заполнить DataGrid и другие редактируемые элементы управления. Для выполнения поиска я создаю ObjectQuery (of 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 (of t), его нельзя сортировать. Как мне получить результаты моего запроса (labSamples) в сортируемую и обновляемую коллекцию, прежде чем назначить ее источником моих данных (CollectionViewSource.Source)?

  • Вам нужно, чтобы коллекция была обновляемой? Mark Rendle 31.01.2011
  • да. Это похоже на такое базовое требование - пользователи ищут данные, а я выгружаю результаты в сетку, чтобы пользователи могли редактировать записи. Где есть веб-страница или видео, чтобы узнать, как это сделать? Я пометил ответ Аарона как принятый слишком рано. Его ответ дает мне сортируемую сетку с ICollectionView в качестве DataGrid.ItemsSource, но другие мои элементы управления больше не привязаны. Я хочу, чтобы DataContext моей формы соответствовал тому, что я использую для ItemSource DataGrid. DeveloperDan 31.01.2011

bindingwpfentity-framework-4wpfdatagrid

Ответы

Ответ 1 · Aaron McIver

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

Ответ 2 · рейтинг 1 · Blerton Hoxha

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы