[WPF] 의존 프로퍼티(Dependency Property) 이해하기
주성돈기자
2023.09.03 14:07
의존 프로퍼티란?
프로퍼티 값이 변경되었을 때 자동으로 어떤 일을 처리하게 할 수 있게 해주는 것.
스타일링, 데이터 바인딩, 애니메이션 등 WPF 주요 부분에 사용된다.
의존 프로퍼티 사용 이유 (장점)
의존 프로퍼티를 사용하면 엘리먼트를 사용하는 시점에 프로퍼티 값이 결정되고, Static 변수이기 때문에 메모리 절약에 효과적이다.
프로퍼티를 구현할 때 필요한 많은 코드를 표준화할 수 있다.
일반 프로퍼티와 다른 점
의존 프로퍼티에는 값이 변경되었을 때 자동으로 알림을 주는 "변경 통보" 기능이 있다.
일반적인 플랫폼은 데이터 값이 변경되었을 때 UI도 변경되는 기능이 많은데, 이럴 때 의존 프로퍼티를 사용해서 편리하게 구현할 수 있다.
구현 예시
1. 의존 프로퍼티를 등록한다.
의존 프로퍼티 등록 함수(DependencyProperty.Register)의 파라미터로 프로퍼티 이름, 프로퍼티 타입, 의존 프로퍼티를 사용하는 클래스 타입이 꼭 필요하다.
개인적으로 만든 오버로드 메소드를 사용하고 싶다면, Metadata를 추가해주면 된다.
Metadata에는 프로퍼티 기본 값과 콜백 메서드를 설정할 수 있다.
publicstaticreadonly DependencyProperty IsDefaultProperty = DependencyProperty.Register("IsDefault", typeof(bool), typeof(Button),
new FrameworkPropertyMetadata(false, new PropertyChangedCallback(OnIsDefaultChanged)));
예제 해석
사용할 프로퍼티 : IsDefault
프로퍼티 타입 : bool
의존 프로퍼티 사용 클래스 : Button 클래스
의존 프로퍼티 기본 값 : false
콜백 메소드명 : OnIsDefaultChanged
2. 의존 프로퍼티로 사용할 값을 구현한다.
publicbool IsDefault
{
get { return (bool)GetValue(Button.IsDefaultProperty); }
set { SetValue(Button.IsDefaultProperty, value); }
}
GetValue와 SetValue로 의존 프로퍼티에 접근할 수 있는 IsDefault를 구현했다.
3. 프로퍼티 값이 변경될 때 호출되는 콜백 메서드를 만든다.
의존 프로퍼티를 갖고 있는 모든 클래스는 DependencyObject를 상속받아야 한다.
privatestaticvoid OnIsDefaultChanged{
DependencyObject o, DependencyPropertyChangedEventArgs e){
//code
}
}
전체 코드
publicclassButton : ButtonBase
{
publicstaticreadonly DependencyProperty IsDefaultProperty = DependencyProperty.Register("IsDefault", typeof(bool), typeof(Button),
new FrameworkPropertyMetadata(false, new PropertyChangedCallback(OnIsDefaultChanged)));
publicbool IsDefault
{
get { return (bool)GetValue(Button.IsDefaultProperty); }
set { SetValue(Button.IsDefaultProperty, value); }
}
privatestaticvoid OnIsDefaultChanged
{
DependencyObject o, DependencyPropertyChangedEventArgs e)
{
//code
}
}
}