본문 바로가기

C#

C# CollectionView를 이용한 데이터 필터링 및 정렬

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 개발에 필수적인 기능입니다. 실무에서 자주 활용해 보시기 바랍니다.