Etc/Test

[WPF] 의존프로퍼티

김컴맹 2023. 4. 24. 15:49
반응형

WPF(Windows Presentation Foundation)에서 프로퍼티(Property)와 의존프로퍼티(Dependency Property)는 둘 다 속성을 나타내지만, 두 가지 차이점이 있습니다.

1. 값의 상속
일반적인 프로퍼티는 값이 상위 요소에서 하위 요소로 상속되지 않습니다. 즉, 부모 요소의 프로퍼티 값이 변경되어도 자식 요소의 값은 변경되지 않습니다. 반면 의존 프로퍼티는 값이 상속됩니다. 즉, 상위 요소에서 값을 설정하면 하위 요소에서 상속받아 사용할 수 있습니다.

2. 메타데이터
의존 프로퍼티는 메타데이터를 가집니다. 메타데이터는 프로퍼티의 기본값, 프로퍼티가 속한 클래스의 이름, 프로퍼티 변경 시 호출되는 콜백 함수 등을 정의할 수 있습니다. 메타데이터를 사용하면 의존 프로퍼티의 동작을 세밀하게 제어할 수 있습니다. 일반적인 프로퍼티는 이러한 메타데이터를 가지지 않습니다.

따라서 의존 프로퍼티는 상속과 메타데이터를 지원하여 WPF의 다양한 기능을 구현하는 데 사용됩니다. 예를 들어, 스타일, 데이터 바인딩, 애니메이션 및 컨트롤의 상태를 저장하는 데 의존 프로퍼티를 사용할 수 있습니다.

 

다음은 WPF에서 의존 프로퍼티를 정의하고 사용하는 간단한 예제입니다.

// 의존 프로퍼티를 정의하는 클래스
public class Person : DependencyObject
{
    public static readonly DependencyProperty NameProperty =
        DependencyProperty.Register("Name", typeof(string), typeof(Person), new PropertyMetadata("Unknown"));

    public string Name
    {
        get { return (string)GetValue(NameProperty); }
        set { SetValue(NameProperty, value); }
    }
}

// 의존 프로퍼티를 사용하는 MainWindow 클래스
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        // Person 객체 생성
        Person person = new Person();
        person.Name = "John";

        // Person 객체의 Name 의존 프로퍼티 값을 출력
        Console.WriteLine(person.Name);
    }
}


위 코드에서는 Person 클래스에서 Name 의존 프로퍼티를 정의하고, MainWindow 클래스에서 Person 객체를 생성하여 Name 프로퍼티를 설정하고 출력합니다. Person 클래스에서 Name 의존 프로퍼티는 DependencyProperty.Register 메서드를 사용하여 정의하며, Person 객체에서 Name 프로퍼티는 GetValue 및 SetValue 메서드를 사용하여 값을 가져오고 설정합니다.

반응형