29
예제 코드:
INotifyPropertyChanged
는 WPF와 같은 데이터 바인딩 기반의 애플리케이션에서 중요한 인터페이스입니다. 이 인터페이스는 개체의 속성 값이 변경될 때 알림을 보낼 수 있도록 해주어, UI 요소가 변경 사항을 자동으로 인식하고 업데이트됩니다.
INotifyPropertyChanged
의 역할
INotifyPropertyChanged
는PropertyChanged
이벤트를 제공합니다.- 객체의 속성이 변경될 때 해당 이벤트를 호출하여 UI나 다른 데이터 소비자가 변경 사항을 감지할 수 있습니다.
- 주로 MVVM 패턴에서 ViewModel이 속성 변경 시 UI에 알리기 위해 사용됩니다.
인터페이스 구현 방법
INotifyPropertyChanged
를 구현하려면 클래스에서 PropertyChanged
이벤트와 OnPropertyChanged
메서드를 작성해야 합니다.
예제 코드: INotifyPropertyChanged
구현 및 활용
다음은 INotifyPropertyChanged
를 구현하여 속성 변경 시 UI가 업데이트되도록 하는 예제입니다.
- ViewModel (MainViewModel.cs)
using System.ComponentModel;
namespace WpfApp241111
{
public class MainViewModel : INotifyPropertyChanged
{
private string _userName;
public string UserName
{
get { return _userName; }
set
{
if (_userName != value)
{
_userName = value;
OnPropertyChanged(nameof(UserName));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
설명
UserName
속성: 속성의 값이 변경될 때OnPropertyChanged
메서드를 호출하여PropertyChanged
이벤트가 발생합니다.OnPropertyChanged
메서드:PropertyChanged
이벤트가 구독된 모든 핸들러에propertyName
을 전달하여 속성의 변경을 알립니다.nameof
연산자: 속성 이름을 문자열로 직접 사용하지 않고nameof
를 사용하여 코드의 가독성과 유지 보수성을 높입니다.
View와 바인딩 설정
- MainWindow.xaml
<Window x:Class="WpfApp241111.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="INotifyPropertyChanged Example" Height="200" Width="400">
<Grid>
<StackPanel>
<!-- UserName 속성을 ViewModel에 바인딩 -->
<TextBox Text="{Binding UserName, UpdateSourceTrigger=PropertyChanged}" Width="200" Margin="10"/>
<TextBlock Text="{Binding UserName}" FontSize="16" Margin="10"/>
</StackPanel>
</Grid>
</Window>
- MainWindow.xaml.cs
using System.Windows;
namespace WpfApp241111
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainViewModel { UserName = "Initial Name" };
}
}
}
- 결과 사진
설명
DataContext
:MainWindow
의DataContext
는MainViewModel
로 설정되어UserName
속성을TextBox
와TextBlock
이 사용할 수 있습니다.TextBox
:UserName
속성에 양방향 바인딩되며, 사용자가 입력을 변경할 때마다 ViewModel의 속성 값이 업데이트됩니다.TextBlock
:UserName
속성의 변경 사항이TextBlock
에 반영되어 UI가 업데이트됩니다.
요약
INotifyPropertyChanged
는 UI 요소가 데이터 변경을 자동으로 감지하도록 합니다.OnPropertyChanged
메서드는 속성 값이 변경될 때 호출되어 UI가 최신 상태를 유지합니다.- 이 인터페이스는 MVVM 패턴에서 데이터 바인딩을 통해 뷰와 데이터 간의 동기화를 자동화하는 핵심 요소입니다.