삽질의 현장/- .NET

#121_닷넷(.NET)_ WPF_ 데이터 바인딩_필터링 & 정렬 & 그룹핑

shovelman 2015. 12. 6. 17:21


안녕하세요 삽잡이입니다.


이번 시간에는 정렬, 필터링, 그룹핑에 대해서 알아보려고 합니다.

이 세가지 연산이 가장 집합 연산중에서 기본이 되는 연산입니다.


해당 연산들은 모두 View를 통해 이루어집니다.

즉, View를 가지고 논다 이겁니다.

원본을 가지고 놀면 왜 안되는지는... 아시겠지요...?




컬렉션을 View를 통해 UI에 보여줄 경우,

전부 볼 일 없이, 필요한 것만 보거나, 정렬하고 싶을 때가 있습니다.


이때, ICollectionView 인터페이스를 구현하여

원하는 View를 구현하여 바인딩 할 수 있습니다.


우선, 필터링입니다.



필터링 버튼을 눌렀을 경우, 

Default View를 얻어오게 됩니다.

그리고 View에 Filter라는 속성이 null일 경우 

새로운 필터를 장착하는 것이지요.


참고로 Filter는 

Predicate이기 때문에, 람다식을 쓸 수 있습니다.



다음으로 정렬입니다.



해당 예제는 BCL에서 제공해주는 정렬입니다.


Default View를 얻고난 뒤에,

SortDescription을 보고 어떤 정렬 규칙도 가지고 있지 않다면,

정렬 규칙을 달겠다는 뜻입니다.


그런데, 이 방법 외에도

사용자 규칙을 사용한 정렬을 수행할 수 있습니다.

커스터마이징이라고 하지요.



사용자 정렬 정책을 사용하기 위해서는

ICollectionView를 구현한 자식 클래스인

ListCollectionView 클래스를 사용해야합니다.

컬렉션 View는 맞는데, 순서를 가지고 있는 컬렉션 View이지요.


ListCollectionView 클래스를 사용하는 이유는

해당 클래스만이 커스터마이징을 할 수 있는 정렬 규칙을 가지고 있기 때문입니다.



새로운 정렬 규칙을 달 때에는

IComperer 인터페이스를 구현한 클래스를 사용해야합니다.

즉, 제 3자를 비교하는 것이지요.


다음으로 그룹핑입니다.



보여지고 있는 목록에서

따로 따로 나누어 보기 편하게 보여주는 방식을 그룹핑이라고 합니다.


그룹이란 어떻게 모을 것인지 정해서 모아야됩니다.

WPF에서는 화면에 그 그룹별로 보여줘야하는데,

그룹 스타일을 줘야 화면상에 나타나게 됩니다.



해당 스타일은 닷넷에서 제공해주는 기본 그룹 스타일입니다.


만약, 그룹 스타일을 나이별로 나누고 싶다면

그 기중이 필요하지 않겠습니까?



이때 그 기룹 기준을 설정해주는 클래스를 정의해여 사용합니다.



아무튼... 그룹 Description을 설정하는데 

PropertyGroupDescription를 생성해줍니다.


해당 예제에서는 Age가 기준이 되고,

규칙이 AgeToRangeConverter이지요.


이와 같은 방식으로 다양한 그룹핑을 만들 수 있습니다.



이번 시간은 여기까지 하도록 하겠습니다.

이상 삽잡이였습니다!


<참고 : Programming WPF : 사용자 경험(UX)을 바꾸는 기술>