2016-06-29 4 views
2

Ich verwende VS2013, .net4.5, WPF Desktop-Anwendung.CollectionViewSource.SortDescriptions funktionieren nicht beim Binden von Elementen mit 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))); 

Wenn ich .AsParallel() entfernen, dann werden die Elemente sortiert, wenn hinzugefügt, die Elemente in Unordnung sind. Aber ich fühle mich ein bisschen seltsam. SortDescription Garantie die UI-Elemente sortiert werden, egal in welcher Reihenfolge die Elemente im Hintergrund hinzugefügt wurden?

+1

Nachdem die 'ObsPasses'-Eigenschaft zugewiesen wurde, sind alle parallelen Operationen beendet und es bleibt eine' ObservableCollection' in einer unbekannten Reihenfolge übrig. Es gibt keine Möglichkeit, die Sortierungsfunktion 'CollectionViewSource' zu ​​beeinflussen. Es muss etwas anderes sein, was du tust. Bitte geben Sie _full_ verifizierbaren Beispielcode an. –

+0

@NovitchiS nach einigen Tests auf meinem Demo-Projekt fand ich ** SortDescription funktioniert nicht, egal AsParallel oder nicht **. Also muss ich irgendwo falsch liegen, aber ich kann es nicht herausfinden. [Demo] (https://github.com/LeiYangGH/SortParellel) –

+0

Nur eine Idee - haben Sie versucht, CollectionView zum Aktualisieren zu zwingen, sobald die Sammlung mit View.Refresh gefüllt wurde? –

Antwort

1

In Ihrem Code Demo haben Sie nicht an CollectionViewSource, sondern an die Sammlung selbst gebunden. Versuchen

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

mit

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

Dies ist die einzige Antwort und ich kann die Frage nicht mit einem Kopfgeld löschen. Also akzeptiere, wer für mich debuggte. Tatsächlich fand ich schließlich, dass es mein Fehler und keine Beziehung mit Parallel oder CollectionViewSource war. @michauzo Sie wies auf einen Tippfehler und es war nicht meine erste Ursache. Trotzdem danke! –

+0

Können Sie teilen, was der Fehler war? Ich bin neugierig ... – michauzo

+0

Der Fehler hatte nichts mit einer bestimmten Technologie zu tun, es war ein Business-Logik-Problem. Sie brauchen also nicht neugierig zu sein. Wenn Sie wissen möchten, sehen Sie [github] (https://github.com/LeiYangGH/AnyalizeTestLog/commit/b9859020952f9dfd52f8336b86bda176f591710c) –

1

Schnell Vorschlag zu ersetzen, wenn Sie versuchen können, das Hinzufügen IsLiveFilteringRequested = "True" auf Ihrem Collection.

Lassen Sie mich wissen, ob es funktioniert.

Verwandte Themen