C#에서 CollectionView는 데이터를 필터링하고 정렬하는 데 매우 유용한 클래스입니다. 주로 WPF나 UWP에서 바인딩된 컬렉션을 다룰 때 사용됩니다.
1. CollectionView 기본 개념
CollectionView는 원본 컬렉션을 감싸며, 필터링, 정렬, 그룹화 기능을 제공합니다. 이렇게 하면 UI에 표시되는 데이터만 조작할 수 있어 효율적입니다.
2. CollectionView 생성 및 필터링
다음 예제는 간단한 리스트를 필터링하는 방법입니다.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Data;
var items = new List<string> { "Apple", "Banana", "Cherry", "Date" };
var collectionView = CollectionViewSource.GetDefaultView(items);
// 필터 조건: 이름에 'a' 문자가 포함된 항목만 표시
collectionView.Filter = item =>
{
var str = item as string;
return !string.IsNullOrEmpty(str) && str.ToLower().Contains('a');
};
// 필터링된 결과 출력
foreach (var item in collectionView)
{
Console.WriteLine(item);
}
3. CollectionView 정렬 설정
정렬은 SortDescriptions 컬렉션에 정렬 규칙을 추가하여 설정합니다.
// 문자열 오름차순 정렬
collectionView.SortDescriptions.Clear();
collectionView.SortDescriptions.Add(new SortDescription("", ListSortDirection.Ascending));
// 정렬된 결과 출력
foreach (var item in collectionView)
{
Console.WriteLine(item);
}
4. 사용자 정의 객체 필터링 및 정렬
객체 컬렉션에서도 같은 방법으로 사용 가능합니다.
public class Product
{
public string Name { get; set; }
public double Price { get; set; }
}
var products = new List<Product>
{
new Product { Name = "Pen", Price = 1.2 },
new Product { Name = "Notebook", Price = 2.5 },
new Product { Name = "Pencil", Price = 0.8 }
};
var productView = CollectionViewSource.GetDefaultView(products);
// 필터: 가격이 1 이상인 제품만 표시
productView.Filter = obj =>
{
var p = obj as Product;
return p != null && p.Price >= 1;
};
// 정렬: 가격 기준 내림차순
productView.SortDescriptions.Clear();
productView.SortDescriptions.Add(new SortDescription(nameof(Product.Price), ListSortDirection.Descending));
foreach (Product p in productView)
{
Console.WriteLine($"{p.Name}, {p.Price}");
}
이처럼 CollectionView는 데이터 필터링과 정렬을 쉽게 처리할 수 있어 UI 개발에 필수적인 기능입니다. 실무에서 자주 활용해 보시기 바랍니다.
'C#' 카테고리의 다른 글
| C# 동적 메서드 호출(DynamicMethod)으로 런타임 성능 개선 (0) | 2026.07.14 |
|---|---|
| C# 유니코드 문자열 처리와 인코딩 변환 (0) | 2026.07.13 |
| C# Stopwatch로 함수 호출 빈도 측정하기 (0) | 2026.07.12 |
| C# 직렬화 시 참조 순환 처리 전략 (0) | 2026.07.12 |
| C# Span<T>와 stackalloc로 고성능 버퍼 생성 (0) | 2026.07.10 |