본문 바로가기
유니티 공부/C# 문법

C# - INotifyPropertyChanged 인터페이스

by 코딩하는 돼징 2023. 11. 19.
반응형

INotifyPropertyChanged 인터페이스

객체가 속성의 변경을 클라이언트에게 알리고, UI가 동적으로 업데이트되도록 할 수 있다.

public interface INotifyPropertyChanged

PropertyChangedEventArgs 클래스

INotifyPropertyChanged 인터페이스에서 속성이 변경될 때 알리기 위해 사용되는 이벤트의 인자로 전달되는 클래스이다. 주로 PropertyChanged이벤트에 사용되며 어떤 속성이 변경되었는지를 나타내는 데에 활용된다.


PropertyChanged 이벤트

public event PropertyChangedEventHandler PropertyChanged;

PropertyChanged이벤트는 데이터 모델의 속성이 변경될 때마다 발생하며 UI나 다른 객체에서는 이를 구독하여 해당 속성의 변경을 감지하고 적절한 조치를 취할 수 있다. 주로 데이터 바인딩된 UI에서 동적 업데이트를 구현하는데 사용된다.


코드 예시

Name속성이 변경될때 onPropertyChanged메서드를 호출하여 PropertyChanged이벤트를 발생시킨다. 이렇게하면 PropertyChanged이벤트를 구독하는 다른 객체에서 Name의 속성의 변경을 감지하고 적절한 조치를 취할 수 있다.

using System.ComponentModel;

public class Person : INotifyPropertyChanged
{
    private string name;

    public string Name
    {
        get { return name; }
        set
        {
            if (value != name)
            {
                name = value;
                OnPropertyChanged(nameof(Name));
            }
        }
    }

    // 이벤트 정의
    public event PropertyChangedEventHandler PropertyChanged;

    // 속성 변경 알림 메서드
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

외부 코드에서 변경한 경우

Person클래스의 인스턴스를 생성하고 해당 인스턴스의 PropertyChanged이벤트에 대한 핸들러 등록한다. 그리고 속성을 "Piggy"로 변경하면 PropertyChanged이벤트가 발생하고 해당 핸들러에서 변경된 속성의 이름과 값을 출력하게 된다.

Person person = new Person();
person.PropertyChanged += (sender, e) =>
{
    if (e.PropertyName == nameof(Person.Name))
    {
        Console.WriteLine($"Name property changed: {person.Name}");
    }
};

person.Name = "Piggy";

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

댓글