У меня есть метод, который запрашивает базу данных с использованием структуры сущностей и помещает результаты в файл ICollectionView
. ICollectionView
действует как ItemsSource
для DataGrid
. При первом запросе все работает нормально, но при повторном запросе данные не сортируются должным образом, несмотря на применение правильного SortDescriptions
.
Вот мой код для запроса и группировки/сортировки данных:
CollectionViewSource cvsRS;
private ObservableCollection<productorder> rs;
public ObservableCollection<productorder> RS
{
get { return rs; }
set
{
if (rs != value)
{
rs = value;
OnPropertyChanged("RS");
}
}
}
private ICollectionView rsView;
public ICollectionView RSView
{
get { return rsView; }
set
{
if (rsView != value)
{
rsView = value;
OnPropertyChanged("RSView");
}
}
}
public void QueryDatabase()
{
RS = new ObservableCollection<productorder>(DatabaseEntities.productorders.Where(o => o.month.id == CurrentMonth.id));
if (RS != null)
{
cvsRS.Source = RS;
RSView = cvsRS.View;
RSView.GroupDescriptions.Clear();
RSView.GroupDescriptions.Add(new PropertyGroupDescription("producttype.productcategory.name"));
RSView.GroupDescriptions.Add(new PropertyGroupDescription("producttype.name"));
RSView.SortDescriptions.Clear();
RSView.SortDescriptions.Add(new SortDescription("producttype.productcategory.sortorder", ListSortDirection.Ascending));
RSView.SortDescriptions.Add(new SortDescription("client.name", ListSortDirection.Ascending));
RSView.Refresh();
CurrentRecord = null;
SelectedRecords = null;
}
}
Группировка работает нормально, но группы расположены не в правильном порядке в зависимости от сортировки. Я пробовал ряд возможных «исправлений» без успеха (например, добавление описаний сортировки/группировки непосредственно в CollectionViewSource
, сортировка перед группировкой, удаление части сортировки/группировки, удаление SortDescriptions
на CollectionViewSource не выполняет повторную сортировку при изменении свойства).
Кто-нибудь знает, как поддерживать порядок сортировки независимо от того, сколько запросов выполняется? Я открыт для альтернативных методов запроса отображения данных в DataGrid
, если это может сработать.
Binding
) один раз к свойствуObservableCollection<T>
, которое повышаетPropertyChanged
, когда вы даете ему новую коллекцию. Затем повторно заполните, изменив свойство. Либо добавьте новую коллекцию, либо очистите и заполните старую. Но никогда не прикасайтесь кcvsRS.Source
, кроме как для первоначальной настройкиBinding
. - person 15ee8f99-57ff-4f92-890c-b56153   schedule 31.10.2016cvsRS = new CollectionViewSource(); cvsRS.Source = new Binding("RS"); RSView = cvsRS.View;
Но я получаю сообщение об ошибке: «System.Windows.Data.Binding» не является допустимым значением для свойства «Источник». - person matthew_b   schedule 31.10.2016