MVVM의 ViewModel or Model 부분을 구현할 때, View에 속성의 변경 알림을 위해 INotifyPropertyChanged 인터페이스를 이용합니다.

 

PropertyChangedEventArgs 이벤트 Class는 속성의 이름을 인자로 받게되는데, 잘못된 속성명을 넘겨도 Exception을 던지지 않습니다.

 

아래의 코드의 VerifyPropertyName 메서드와 같이 속성의 접근자가 public인지 실제로 존재하는 속성명인지 체크해줍니다.

 

Conditional 특성을 추가해서 DEBUG 상수가 정의되었을 때만 메서드를 호출하기 때문에, 배포시 Release 모드에서는 동작을 하지 않기에

 

성능 저하는 걱정하지 않으셔도 됩니다.

 

    [Serializable]

    public abstract class ObservableObject : INotifyPropertyChanged

    {

        [field: NonSerialized]

        public event PropertyChangedEventHandler PropertyChanged = delegate { };

 

        protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)

        {

            PropertyChanged(this, e);

        }

 

        protected void RaisePropertyChanged(string propertyName)

        {

            VerifyPropertyName(propertyName);

            OnPropertyChanged(new PropertyChangedEventArgs(propertyName));

        }

 

        /// <summary>

        /// 디버그 모드일때만 인자로 넘긴 프로퍼티 이름이 실제 존재하는지 검사합니다.

        /// </summary>

        [Conditional("DEBUG")]

        [DebuggerStepThrough]

        public void VerifyPropertyName(string propertyName)

        {

            //public, 실제 존재하는지 검사

            if (TypeDescriptor.GetProperties(this)[propertyName] == null)

            {

                throw new ArgumentException("public 아니거나 존재하지 않는 속성입니다 : " + propertyName);

            }

        }

    }

 

+ Recent posts