2016-08-18 22 views
0

ListViewのコントロールは、ObservableCollection<>で定期的に項目が追加されています。しかし、私はたいてい最初の10項目を表示するだけです。すなわち、10個以下のアイテムがある場合はそれをすべて表示し、それに応じてサイズを変更し、10個以上ある場合は10個目のアイテムの表示を停止する。WPFで表示されている項目の数を制限します。ListView

私の現在の直感は、ItemsSourceの上位10項目を反映する2番目のコレクションを持っているので、これを行う合理的な方法があるのだろうかと思いました。

+2

、何ちょうど最初の10個の項目を表示するためにあなたのコレクションをフィルタリングについて? – Pikoh

+0

私はそれをどうやってやるのか分かりません。私は基本的なコレクションを維持する必要があるので、私はListViewのItemsSourceを何にバインドするのか、それを持つItemsSourceをどのようにフィルタリングするのか分からないのではないかと思います。 –

+0

[@Pikoh](http://stackoverflow.com/a/39016120/5177728)のアイデアは正しいです、また良い[記事](http://www.wpf-tutorial.com/listview-control/ listview-filtering /)をフィルタリングする例を示します。 – Sam

答えて

1

あなたはこのような何か(私はそれをテストしていませんが、あなたのアイデアを得ること)を行うことができます:

代わりに第二のコレクションの
_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

コレクションの変更箇所がどこにあるのか(定期的にアイテムが追加されると言うので、それが起こった後にこれを行うべきだと思います) – Pikoh

+0

'Refresh()'ステートメントはコレクション変更ハンドラ内にあるはずですが、 'Refresh')は' InitializeComponent() '命令の後にコンストラクタに置かなければなりません。 – Sam

+0

これは主に機能していますが、新しい問題が発生します。フィルタリングは各オブジェクトが追加されるごとに各オブジェクトに対して行われますが、私が必要とするのは、コレクション全体のフィルタリングを完全にリフレッシュすることです。 –

関連する問題