C# WPF 데이터 바인딩 심층 분석 및 고급 활용법
WPF 애플리케이션에서 데이터 바인딩을 최적화하는 방법
1. WPF 데이터 바인딩이란?
데이터 바인딩(Data Binding)은 WPF 애플리케이션에서 UI 요소와 데이터 소스를 연결하는 강력한 기능입니다.
이를 활용하면 코드에서 UI 요소를 직접 조작할 필요 없이, 데이터 변경 사항이 UI에 자동으로 반영됩니다.
2. 데이터 바인딩의 주요 요소
- 바인딩 소스(Binding Source): ViewModel 또는 모델 객체
- 바인딩 타겟(Binding Target): UI 요소 (예: TextBox, Label, ListView)
- 바인딩 모드(Binding Mode): OneWay, TwoWay, OneTime 등
- 컨버터(Converter): 데이터 변환을 위한 ValueConverter
3. 다양한 바인딩 모드
WPF에서는 여러 가지 바인딩 모드를 제공하며, 적절한 모드를 선택하면 성능을 최적화할 수 있습니다.
바인딩 모드 | 설명 | 사용 예 |
---|---|---|
OneWay | 데이터 소스에서 UI로 값이 전달됨 | 라벨, 리스트 등 |
TwoWay | UI와 데이터 소스가 서로 값을 주고받음 | 입력 폼, 슬라이더 등 |
OneTime | 초기 로딩 시 한 번만 바인딩 | 디폴트 값 설정 |
4. MVVM 패턴과 INotifyPropertyChanged
MVVM(Model-View-ViewModel) 패턴은 WPF 개발에서 필수적인 아키텍처 패턴입니다.
ViewModel의 속성이 변경될 때 UI가 자동으로 업데이트되려면 INotifyPropertyChanged 인터페이스를 구현해야 합니다.
INotifyPropertyChanged 예제
using System.ComponentModel;
using System.Runtime.CompilerServices;
public class MainViewModel : INotifyPropertyChanged
{
private string _name;
public event PropertyChangedEventHandler PropertyChanged;
public string Name
{
get { return _name; }
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged();
}
}
}
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
5. 종속성 속성 (Dependency Property)
종속성 속성(Dependency Property)은 WPF의 핵심적인 바인딩 메커니즘 중 하나입니다.
기본적인 속성보다 강력한 기능을 제공하며, UI 업데이트 성능을 최적화하는 데 유용합니다.
종속성 속성 예제
using System.Windows;
using System.Windows.Controls;
public class CustomTextBox : TextBox
{
public static readonly DependencyProperty CustomTextProperty =
DependencyProperty.Register("CustomText", typeof(string), typeof(CustomTextBox));
public string CustomText
{
get { return (string)GetValue(CustomTextProperty); }
set { SetValue(CustomTextProperty, value); }
}
}
6. Command 패턴과 XAML 바인딩
버튼 클릭과 같은 이벤트를 ViewModel에서 처리하려면 Command 패턴을 사용해야 합니다.
Command 패턴 예제
using System;
using System.Windows.Input;
public class RelayCommand : ICommand
{
private readonly Action
'C#' 카테고리의 다른 글
WPF UserControl vs CustomControl 차이와 사용 예제 (0) | 2025.04.05 |
---|---|
WPF MVVM Command 패턴 완전 정복 - RelayCommand 구현 (0) | 2025.04.04 |
WPF에서 다국어 지원(Localization) 구현하기 (0) | 2025.04.02 |
C# 최신 기능 소개 (0) | 2025.04.01 |
C#으로 간단한 계산기 만들기 | WPF 계산기 예제 (0) | 2025.03.31 |