2016-06-29 5 views
2

Я использую VS2013, .net4.5, настольное приложение WPF.CollectionViewSource.SortDescriptions не работает, когда элементы привязки создаются с использованием Parallel

Xaml:

<CollectionViewSource x:Key="cvs" Source="{Binding ObsPasses, Mode=OneWay}"> 
     <CollectionViewSource.SortDescriptions> 
      <scm:SortDescription PropertyName="StartDate"/> 
     </CollectionViewSource.SortDescriptions> 
    </CollectionViewSource> 

CS:

  this.ObsPasses = new ObservableCollection<PassViewModel>(
      Passes.AsParallel().Select(x => new PassViewModel(x))); 

Если удалить .AsParallel(), то элементы сортируются, если добавлены, элементы находятся в беспорядке. Но я чувствую себя немного странно. Не сортируетОписание гарантия элементы пользовательского интерфейса, которые нужно сортировать независимо от того, в каком порядке элементы были добавлены в фоновом режиме?

+1

После того, как свойство 'ObsPasses' будет назначено, все параллельные операции закончены, а оставшееся -' ObservableCollection' в неизвестном порядке. Невозможно повлиять на функцию сортировки CollectionViewSource. Это должно быть что-то еще, что вы делаете. Просьба указать код проверки подлинности _full_. –

+0

@NovitchiS после некоторого тестирования моего демонстрационного проекта, я нашел ** SortDescription не работает независимо от AsParallel или нет **. Поэтому я должен быть чем-то не прав, но я не могу узнать. [Demo] (https://github.com/LeiYangGH/SortParellel) –

+0

Просто идея - вы пытались заставить CollectionView обновиться после того, как коллекция заселена с помощью View.Refresh? –

ответ

1

В вашем коде Демо вы не привязывались к CollectionViewSource, но к самой коллекции. Попробуйте заменить

<ItemsControl ItemsSource="{Binding ObsFoos, Mode=OneWay}" > 

с

<ItemsControl ItemsSource="{Binding Source={StaticResource cvs}}" > 
+0

Это единственный ответ, и я не могу удалить вопрос с щедростью. Поэтому согласитесь, кто отлаживал меня. Фактически, я наконец обнаружил, что это была моя ошибка и никаких отношений с Parallel или CollectionViewSource. @michauzo вы указали на опечатку, и это не было моей первой причиной. В любом случае, благодарю Вас! –

+0

Не могли бы вы поделиться тем, что было ошибкой? Мне любопытно ... – michauzo

+0

Ошибка не имела ничего общего с какой-либо конкретной технологией, это была проблема бизнес-логики. Поэтому вам не нужно любопытно об этом. Если вы хотите узнать, см. [Github] (https://github.com/LeiYangGH/AnyalizeTestLog/commit/b9859020952f9dfd52f8336b86bda176f591710c) –

1

Быстрого предложение, если вы можете попробовать добавить IsLiveFilteringRequested = "True" на вашем CollectionViewSource.

Дайте мне знать, если это сработает.