CODEKILLER

반응형

◆ MVVM패턴을 직접구현으로 사용하고자 할 때 PropertyChanged를 이용한 구현을 하고,

 

아래와 같은 구문을 이용하여 페이지에서 사용하고 있는 'Property명'인지를 체크하는 구문을 넣습니다.

개발시에 PropertyName을 잘못사용하는 경우, 개발자오류를 Debug로 잡아낼 수 있습니다.

PropertyDescriptor pd = TypeDescriptor.GetProperties(this)[propertyName]; 

[Serializable]
public abstract class NotifyPropertyChanged : INotifyPropertyChanged
{
    // 생성자
    public NotifyPropertyChanged()
    {
    }

    // PropertyChangedEventHandler 이벤트
    public event PropertyChangedEventHandler PropertyChanged
    {
        add
        {
            _propertyChanged += value;
        }
        remove
        {
            _propertyChanged -= value;
        }
    }

    [NonSerialized]
    private PropertyChangedEventHandler _propertyChanged;

    // PropertyChanged 이벤트 발생.
    protected void RaisePropertyChanged(string propertyName)
    {
        CheckPropertyName(propertyName);
        OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
    }

    // PropertyChanged 이벤트 발생.
    protected void RaisePropertyChanged(string[] propertyNames)
    {
        foreach (string propertyName in propertyNames)
        {
            RaisePropertyChanged(propertyName);
        }
    }

    // PropertyChanged 함수
    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        PropertyChangedEventSender.Send(this, e, _propertyChanged);
    }

    [Conditional("DEBUG")]
    private void CheckPropertyName(string propertyName)
    {
        PropertyDescriptor pd = TypeDescriptor.GetProperties(this)[propertyName];
        if (pd == null)
        {
            // Property name이 페이지에 존재하는 property인지를 체크하도록 합니다.
            throw new InvalidOperationException("The property with the propertyName '" + propertyName + "' doesn't exist.");
        }
    }
}
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band