» [WPF] INotifiPropertyChanged

[WPF] INotifiPropertyChanged

by DUBUKIMCH

INotifyPropertyChanged는 WPF와 같은 데이터 바인딩 기반의 애플리케이션에서 중요한 인터페이스입니다. 이 인터페이스는 개체의 속성 값이 변경될 때 알림을 보낼 수 있도록 해주어, UI 요소가 변경 사항을 자동으로 인식하고 업데이트됩니다.

INotifyPropertyChanged의 역할

  • INotifyPropertyChangedPropertyChanged 이벤트를 제공합니다.
  • 객체의 속성이 변경될 때 해당 이벤트를 호출하여 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: MainWindowDataContextMainViewModel로 설정되어 UserName 속성을 TextBoxTextBlock이 사용할 수 있습니다.
  • TextBox: UserName 속성에 양방향 바인딩되며, 사용자가 입력을 변경할 때마다 ViewModel의 속성 값이 업데이트됩니다.
  • TextBlock: UserName 속성의 변경 사항이 TextBlock에 반영되어 UI가 업데이트됩니다.

요약

  • INotifyPropertyChanged는 UI 요소가 데이터 변경을 자동으로 감지하도록 합니다.
  • OnPropertyChanged 메서드는 속성 값이 변경될 때 호출되어 UI가 최신 상태를 유지합니다.
  • 이 인터페이스는 MVVM 패턴에서 데이터 바인딩을 통해 뷰와 데이터 간의 동기화를 자동화하는 핵심 요소입니다.

You may also like

Leave a Comment

error: Content is protected !!