Windows Presentation Foundation(WPF)은 마이크로소프트의 UI 프레임워크로, 데스크톱 응용 프로그램을 개발하는 데 널리 사용됩니다. WPF에서는 다양한 데이터바인딩 기술을 제공합니다. 이 장에서는 WPF의 핵심 개념 중 하나인 컬렉션 뷰(CollectionView)에 대해 자세히 알아보고, 데이터를 정렬하고 필터링하는 방법을 설명하겠습니다.
1. 컬렉션 뷰(CollectionView)란?
컬렉션 뷰는 WPF의 데이터 바인딩 기능과 함께 사용되는 객체로, 데이터 소스를 대상으로 뷰(View)를 제공하는 역할을 합니다. 최상위 컬렉션을 관리하고, 이 컬렉션의 내용을 정렬, 필터링, 그룹화 등의 기능을 지원합니다. 이를 통해 WPF의 MVVM 패턴을 논리적으로 구현할 수 있으며, UI에서 데이터를 보다 유연하게 다룰 수 있습니다.
2. 컬렉션 뷰의 주요 기능
- 정렬(Sorting): 컬렉션 뷰는 컬렉션의 항목을 특정 속성을 기준으로 정렬할 수 있습니다.
- 필터링(Filter): 조건에 맞는 항목만 선택하여 컬렉션을 보여줄 수 있습니다.
- 그룹화(Grouping): 데이터의 특정 속성에 따라 항목을 그룹으로 묶어 표현할 수 있습니다.
3. 컬렉션 뷰 생성하기
컬렉션 뷰를 생성하는 방법은 매우 간단합니다. 먼저 컬렉션 뷰를 사용하는 데이터를 정의한 후, CollectionViewSource를 통해 컬렉션 뷰를 생성합니다. 아래는 간단한 예시입니다.
using System.Collections.Generic;
using System.Windows;
using System.Windows.Data;
namespace WpfApp
{
public partial class MainWindow : Window
{
public List<Person> People { get; set; }
public MainWindow()
{
InitializeComponent();
People = new List<Person>()
{
new Person { Name = "John", Age = 30 },
new Person { Name = "Jane", Age = 25 },
new Person { Name = "Mike", Age = 35 },
};
CollectionViewSource collectionViewSource = new CollectionViewSource();
collectionViewSource.Source = People;
this.DataContext = collectionViewSource.View;
}
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
}
위의 예시에서 <Person> 클래스를 만들고, 이름과 나이를 속성으로 가진 인스턴스를 리스트에 추가했습니다. CollectionViewSource를 사용해 리스트를 기반으로 한 컬렉션 뷰를 생성하였습니다.
4. 데이터 정렬하기
컬렉션 뷰에서 데이터를 정렬하려면 SortDescriptions 속성을 사용해야 합니다. 아래는 나이에 따라 정렬하는 예제입니다.
collectionViewSource.SortDescriptions.Add(new SortDescription("Age", ListSortDirection.Ascending);
이 코드는 Age 속성을 기준으로 오름차순으로 정렬합니다. 내림차순으로 정렬하고 싶다면 ListSortDirection.Descending을 사용하면 됩니다.
5. 데이터 필터링하기
필터링은 특정 조건을 만족하는 항목만 선택하여 보여줄 수 있게 해줍니다. 컬렉션 뷰에서 필터링을 하려면 Filter 속성을 정의해야 합니다. 다음은 나이가 30세 이상인 사람만 보여주는 필터링 예제입니다.
collectionViewSource.Filter += (s, e) =>
{
if (e.Item is Person person)
{
e.Accepted = person.Age >= 30;
}
};
6. UI에 바인딩하기
데이터를 정렬하거나 필터링한 후, 이를 UI에 바인딩하여 보여줄 수 있습니다. XAML에서 아래와 같이 바인딩을 설정합니다.
7. 결론
WPF에서 컬렉션 뷰를 활용하면 데이터 소스를 유연하게 정렬, 필터링, 그룹화할 수 있습니다. 이는 MVVM 패턴의 구현에서 매우 중요한 요소로 작용합니다. WPF를 사용하여 응용 프로그램을 개발할 때, 이러한 기법들을 잘 활용하면 더욱 우아하고 기능적인 UI를 만들 수 있습니다.