2016-06-29 8 views
2

私はVS2013、.net4.5、WPFデスクトップアプリケーションを使用しています。バインディングアイテムがパラレルを使用して作成された場合、CollectionViewSource.SortDescriptionsが機能しません。

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()を削除すると、アイテムが並べ替えられて、追加した場合、アイテムは無秩序です。 しかし、私は少し奇妙に感じます。 SortDescription の項目がバックグラウンドで追加された順序に関係なくソートされますか?

+1

'ObsPasses'プロパティが割り当てられた後、すべての並列処理が終了し、残っているものは未知の順序で' ObservableCollection'になります。 'CollectionViewSource'ソート機能に影響する方法はありません。それはあなたがやっている何か他のものでなければなりません。検証可能な_full_サンプルコードを提供してください。 –

+0

@NovitchiS私のデモプロジェクトでいくつかのテストをしたところ、** SortDescriptionはAsParallelに関係なく**動作していませんでした。だから私はどこかで間違っているはずですが、私は見つけられません。 [Demo] –

+0

ちょっと考えてみましょう.View.Refreshを使ってコレクションにデータが取り込まれると、CollectionViewを強制的に更新しようとしましたか? –

答えて

1

コードデモでは、CollectionViewSourceではなく、コレクション自体にバインドしました。あなたがCollectionViewSourceにIsLiveFilteringRequested = "true" を追加してみてくださいすることができた場合、

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

これは唯一の回答で、私は賞金のある質問を削除できません。だから私のためにデバッグした人を受け入れてください。実際に私は最終的にそれが私の間違いであり、ParallelまたはCollectionViewSourceとの関係ではないことを発見しました。 @michauzoあなたはタイプミスを指摘しましたが、それは私の最初の根本的な原因ではありませんでした。とにかくありがとうございました! –

+0

間違いが何であったかを教えてください。私は好奇心が強いです... – michauzo

+0

障害は、特定の技術とは関係なく、ビジネスロジックの問題でした。だからあなたはそれについて不思議である必要はありません。知りたい場合は、[github](https://github.com/LeiYangGH/AnyalizeTestLog/commit/b9859020952f9dfd52f8336b86bda176f591710c)を参照してください。 –

1

クイック提案して

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

を交換してみてください。

動作するかどうか教えてください。

関連する問題