WPF교육)의존프로퍼티, (DependencyProperty), 의존속성 이란?
의존 프로퍼티(DependencyProperty), 의존속성
n 기존의 닷넷 Property에 WPF 요소를 가미하여 새롭게 탄생 시킴
n XAML, C# 코드 비하인드에서 사용 가능하며 의존속성 값이 변경되면 자동으로 어떤 것을 로드되게 하거나 랜더링 되도록 할 수 있는데 애니메이션, 스타일링, 데이터바인딩 등에 자주 사용된다.
n 우선 간단히 예제를 하나 만들어 보자.
n 비주얼 스튜디오 -> WPF 응용프로그램 , 프로젝트명 : DependencyPropertyTest
n MainWindow.xaml
n MainWindow.xaml.cs
n 실행화면
n 의존 속성은 의존속성을 선언, 등록 그리고 프로퍼티를 생성하는 3단계로 작성된다.
n 의존 속성 선언 및 등록
의존속성은 읽기전용(readonly) 필드로 선언되는데 이것은 오직 FrameworkElement 클래스의 static 생성자에서만 설정될 수 있다는 것을 의미한다.
DependencyProperty 클래스에는 public 생성자가 없기 때문에 static 메소드인 DependencyProperty.Register()를 사용해서 등록한다.
Register 메서드의 입력 파라미터의 첫 번째 파라미터는 프로퍼티 이름이다. 여기서는 “MyText”, 두 번째 인자는 프로퍼티(MyText)가 사용할 데이터 타입으로 여기에서는 String 이다. 세 번째 인자는 프로퍼티를 소유하게 될 타입, 이 예제에서는 MainWindow 클래스가 된다. 네 번째 인자는 실제로 어떻게 동작할 것인지에 대한 옵션을 설정을 할당해 준다. FrameworkPropertyMetadata 객체를 통하여 만약 값이 수정되었을 때의 알림을 어떻게 받을 것인가를 정의했으며 본 예제에서는 OnMyPropertyChanged 메소드가 알림을 받을 콜백 함수로 정의되었다. 선택적으로new ValidateValueCallback을 사용하여 값의 유효성 검사를 어떻게 할 것인지 등을 설정하면 된다. 네 번째, 다섯 번째 파라미터는 옵션 파라미터이다.
n DependencyProperty(MyProperty)를 위한 래퍼 프로퍼티 MyText 선언
이 래퍼 프로퍼티에서는 System.Windows.DependencyObject 클래스의 GetValue()와 SetValue() 메서드를 이용해서 get, set을 정의해야한다.
n Context Menu Click 이벤트에서는 MyText 프로퍼티에 값을 설정하면 자동으로 위에서 선언한 콜백 함수(OnMyPropertyChanged)가 호출된다.
n 우리가 흔히 알고 있는 Height와 Width와 같은 멤버들은 FrameworkElement를 상속받았고 Content 속성은 ControlContent로부터 상속받은 속성으로 모두 의존속성이다.
n 데이터 바인딩에서 의존속성을 사용하는 예제를 작성하자.
n 비주얼 스튜디오 -> WPF 응용프로그램 , 프로젝트명은 WpfApp1
n DPTest.cs
n MainWindow.xaml
n 실행화면