2016-08-18 5 views
0

So habe ich eine ListView Kontrolle durch eine ObservableCollection<> unterstützt, die in regelmäßigen Abständen Elemente hinzugefügt wird. Ich möchte jedoch nur die ersten 10 Artikel anzeigen; d. h. wenn es höchstens 10 Elemente gibt, werden alle angezeigt, während die Größe entsprechend geändert wird, und wenn mehr als 10 Elemente vorhanden sind, werden sie am 10. Element nicht mehr angezeigt.Beschränken Sie die Anzahl der angezeigten Elemente in WPF ListView

Ich fragte mich, ob es einen vernünftigen Weg dazu gab, da meine derzeitige Intuition ist, eine zweite Sammlung zu haben, die die Top 10 Artikel der ItemsSource spiegelt und entsprechend aktualisiert.

+2

Statt einer zweiten Sammlung, was über Ihre Sammlung Filterung nur die ersten 10 Elemente anzuzeigen ? – Pikoh

+0

Ich bin mir nicht sicher, wie ich das machen würde. Ich muss die zugrundeliegende Sammlung pflegen, daher habe ich Angst, ich weiß nicht, an was ich die ItemsSource des 'ListView' binden soll oder wie ich die ItemsSource filtern soll. –

+0

[@ Pikoh] (http://stackoverflow.com/a/39016120/5177728) 's Idee ist richtig, es gibt auch gute [Artikel] (http://www.wpf-tutorial.com/listview-control/ listview-filtering /) mit Filterbeispiel. – Sam

Antwort

1

Sie so etwas tun könnte (ich es nicht getestet haben, aber Sie können auf die Idee kommen):

_defaultView = CollectionViewSource.GetDefaultView(YourCollection); 
_defaultView.SortDescriptions.Add(new System.ComponentModel.SortDescription(".", System.ComponentModel.ListSortDirection.Ascending)); 
_defaultView.Filter = o => 
{ 
    int index = YourCollection.OrderBy(s => s).ToList().IndexOf(o as string); 
    return index >= 0 && index < 10; 
}; 
_defaultView.Refresh(); 
+0

Ich denke, dass sollte gehen, wo Sie Sammlung ändert (Sie sagen, dass in regelmäßigen Abständen Elemente hinzugefügt werden, so denke ich, dass Sie dies tun sollten, nachdem das passiert) – Pikoh

+0

Wahrscheinlich nur 'Refresh()' Anweisung sollte in Kollektion ändern Handler sein, während alle Ansicht Initialisierung (und auch 'Refresh') sollte nach der' InitializeComponent() 'Anweisung in den Konstruktor gestellt werden. – Sam

+0

Okay, ich habe das größtenteils funktioniert, aber ein neues Problem entsteht. Die Filterung wird für jedes Objekt ausgeführt, wenn jedes Objekt hinzugefügt wird. Allerdings muss ich die Filterung der gesamten Sammlung jedes Mal vollständig aktualisieren –

Verwandte Themen