2

WPF 필터링 및 관찰 가능한 컬렉션 내가 가진 무엇WPF 관찰 가능한 수집 및 수집 소스보기 정렬에 필터링 도포하는 항목

에 정렬?

DataGrid를 검색하기위한 DataGrid 및 텍스트 상자가있는 usercontrol이 있습니다. 내 viewmodel에서 DataGrid에 바인딩 된 EmployeeCollection이라는 ObservableCollection이 있습니다. 우리가 다음

Emp1 [email protected]

[email protected]

EMP를 2

EMP를 [email protected] 직원 컬렉션

EmployeeName의 이메일 ID의 내용입니다 생각해 보자

ABC [email protected]

DEF의 [email protected]

이 컬렉션은 데이터 격자에 바인딩되며 모든 것이 올바르게 표시됩니다. 뷰 모델에서는 텍스트 상자에 제공된 입력을 사용하여 콜렉션을 검색하기 위해 콜렉션 기본보기에 다음 필터를 추가했습니다. 지정된 검색 텍스트로 시작하는 정확한 항목과 다른 항목을 표시합니다.

CollectionViewSource.GetDefaultView(EmployeeCollection).Filter = 
         x => (((EmployeeViewModel)x).Name.Equals(SearchText, StringComparison.CurrentCultureIgnoreCase) || ((EmployeeViewModel)x).Name.ToLower().StartsWith(SearchText.ToLower())); 

내가 기대 ?

이제 검색 텍스트 상자에 "Emp"를 입력하고 검색 결과를 클릭합니다. 내가 기대하는 결과는 정확한 일치를 먼저 표시 한 다음 다음과 같이 부분 일치 (데이터로 시작)를 표시하는 것입니다.

의 EMP [email protected]

내가 예상되는 순서를 받고 있지 않다 그러나

Emp1 [email protected]

EMP를 2 [email protected]

. 데이터가 EmployeeCollection에 저장되는 순서대로 결과가 표시됩니다.

Emp1 [email protected]

EMP를 [email protected]

EMP를 내가 처음 다음 일치로 정렬 달성 어떻게 지금이 [email protected]

부분 일치 ?

답변

2

당신은 CollectionView 따라

public class EmployeeComparer : IComparer 
{ 
    public int Compare(object x, object y) 
    { 
     return string.Compare((EmployeeViewModel)x.Name, (EmployeeViewModel)y.Name); 
    } 
} 




var view = (ListCollectionView)CollectionViewSource.GetDefaultView(EmployeeCollection); 
view.CustomSort = new EmployeeComparer(); 
+1

이 의지 종류의 alphetically에만 권리를 정렬 필터와 함께 CustomSort를 사용할 수 있습니다. 필요한 것은 완전 일치로 먼저 정렬 한 다음 부분 일치로 정렬하는 것입니다. 그러한 정렬을 달성 할 수 있습니까? – Yuvaraj