◆ 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.");
}
}
}