2010-06-20 8 views
2

나는 ObservableCollection<ViewUnit> _myItems 필드를 가지고 있습니다. 여기서 ViewUnitINotifyPropertyChanged입니다.람다를 사용하여 ObservableCollection을 자름

ViewUnitHandled : bool입니다.

WPF 응용 프로그램의 기본보기에는 _myItems에 바인딩되는 ListBox이 있습니다.

IObservableCollection<>은 기존 _myItems에 의존하지만 필터링 된 항목 만 사용하는 것이 좋습니다 (람다 식을 사용하는 것이 바람직 함).

이상적으로,이

IObservableCollection<ViewUnit> _myFilteredCollection = HelperClass<ViewUnit>.FromExisting(_myItems, (e) => !e.Handled); 

내가 내 자신에 그것을 구현할 수있을 것이다. 나는이 문제를 통해 누군가를 느낀다. 그리고 좋은 해결책이있다. (나는 그 이름을 모른다.)

답변

4

CollectionView을 살펴보십시오. 이것은 필터링, 그룹화 및 정렬을 처리하는 컬렉션을 둘러싼보기입니다. 당신이 WPF를 물어 보면 실제로 기본보기로 결합하는 컬렉션에 바인딩하는, 그래서 당신은 그냥이 같은 기본 모음보기 필터링 할 수 있습니다 : 당신이해야합니다, 그래서 object에 필터는 술어가

var collectionView = CollectionViewSource.GetDefaultView(_myItems); 
collectionView.Filter = e => !((ViewUnit)e).Handled; 

을 매개 변수를 ViewUnit으로 변환하십시오. 속성이 변경되면 알림도 전송되지 않으므로 Handled 속성이 변경되면 collectionView.Refresh으로 전화해야합니다. 그래도 _myItems에 추가하거나 삭제하면 업데이트됩니다.

Bea Stollnitz의 블로그 항목 How do I filter items from a collection도 확인하십시오.

+0

ObservableCollection에서 만든 CollectionView는 이벤트를 올바르게 발생시킵니다. 그것은 정말 중요한 힘입니다. –

관련 문제