2012-12-08 4 views
2

현재 ItemsSource가 ObservableCollection으로 설정된 GridView가 있습니다. 기본 데이터에 대한 업데이트는 내 노력으로 UI에 반영됩니다. 모든 것이 잘 작동합니다.Windows 8에서 GridView 필터링

특정 항목 만 표시되도록 ObservableCollection에 필터를 적용하는 가장 깨끗한 방법은 무엇입니까? 이상적으로 ObservableCollection에서 항목을 실제로 제거하고 싶지 않으며 두 가지 컬렉션을 유지 관리하지 않아도되므로 작업을 동기화하는 것이 더 어려워집니다. CollectionViewSource는 유망 해 보이지만 Windows Store App 구현에는 필터링 기능이 부족한 것 같습니다 (MS?). 어쩌면

this.DefaultViewModel["GreaterThan10Items"] = originalList.Where(c => c.SomeProperty > 10) 
    .Select(c => new {c.SomeProperty, c.OtherProperty}); 

또는 : LINQ 사용

답변

0

당신이 템플릿 MVVM의 어떤 종류를 사용하고 Asuming 물론

this.DefaultViewModel["Children"] = from query in originalList 
            where query.age <10 
            select new Person 
            { 
             age= query.age, 
             name = query.Name 
            }; 

는 ItemViewSource은 GreaterThan10Items와의 GridView에 연결되어 있어야합니다 그 ItemViewSource에 묶여

1

난 그냥 내 자신의 C# + XAML 윈도우 8 응용 프로그램 에서이 같은 문제를 다루고있어. 이 세 가지 오픈 소스 프로젝트 중 어떤 것도 이후의 기능을 제공합니다 : Bindable LINQ, ObticsContinuous LINQ.

ViewViewSource에는 Windows 8의 필터링 기능이 포함되어 있지 않습니다. 어쨌든보기 모델에 그러한 기능을 추가하는 것이 바람직합니다. 그렇게 할 때의 주된 장점은 Portable Class Library (PCL)로 패키지 된 View Model (필터링 포함)이 WPF, Silverlight 및 Windows 8 프로젝트에서 이식 될 수 있다는 것입니다.

위의 세 가지 오픈 소스 프로젝트가 나에게 재미있는 것처럼 보였지만, 필자는 MVVM framework 위에 빌드하여이 작업을 수행했습니다. 내 프레임 워크는 이미 정렬을 지원하므로 필터링이 자연스럽게 추가되었습니다. 지난 달에 구현 한 Reactive API을 사용하는 중에도 쉽게 추가 할 수있었습니다. 필터링을 포함하는 MVVM 프레임 워크의 최신 버전을 아직 업로드하지 않았습니다. 위의 세 가지 오픈 소스 프로젝트 중 어느 것도 당신에게 어울리지 않으면 알려주세요. 그래서 조금 더 빨리 업로드 할 수 있습니다.