2016-06-29 1 views
2

VS2013, .net4.5, WPF 데스크톱 응용 프로그램을 사용하고 있습니다.Parallel을 사용하여 바인딩 항목을 만들 때 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과 상관없이 작동하지 않는 것으로 나타났습니다 **. 그래서 나는 어딘가 틀림에 틀림 없다. 그러나 나는 알아낼 수 없다. [데모] (https://github.com/LeiYangGH/SortParellel) –

+0

그냥 생각 - ViewView.Refresh를 통해 컬렉션이 채워지면 CollectionView를 새로 고치려고 했습니까? –

답변

1

코드 데모에서는 CollectionViewSource가 아니라 컬렉션 자체에 바인딩했습니다. 당신이 당신의 CollectionViewSource에 IsLiveFilteringRequested이 = "참"추가 시도 할 경우,

<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}" > 

를 교체하십시오.

작동하는지 알려주세요.