2016-08-18 3 views
0

그래서 ListView 컨트롤에 ObservableCollection<>이 주기적으로 추가 된 컨트롤이 지원됩니다. 하지만 처음 10 개 항목 만 표시하고 싶습니다. 즉, 최대 10 개의 항목이있는 경우 모든 항목을 표시하고 그에 따라 크기를 조정하며, 10 개 이상인 경우 10 번째 항목에 표시하지 않습니다.WPF에서 표시되는 항목 수 제한 ListView

필자의 직감이 ItemsSource의 상위 10 개 항목을 반영하는 두 번째 모음을 갖는 것이므로이 작업을 수행하는 합리적인 방법이 있는지 궁금합니다.

+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

그래, 대부분이 작업을하고 있지만 새로운 문제가 발생합니다. 필터링은 각 객체가 추가 될 때 각 객체에 대해 수행됩니다. 그러나 내가해야 할 일은 매번 전체 컬렉션의 필터링을 새로 고치기 위해서입니다. –

관련 문제