ABOUT ME

-

  • [WPF] 의존 프로퍼티!?
    Programming/C# 2019. 3. 8. 23:21

    안녕하세요. 간단하게 따라 할 수 있는 예제를 만드는 Teemol입니다!


    오늘의 예제는 WPF Dependency Property의 간단한 사용법만 알려드리려고 합니다.


    여기서 Dependency Property(의존 프로퍼티)란,

    의존 속성 값이 변경되면 자동으로 어떤 것을 처리하게 할 수 있게 해주는 것인데,

    애니메이션, 스타일, 데이터 바인딩 등에서 사용된다고 합니다.


    WPF에서 화면을 구성하는 다양한 컨트롤들도 의존 프로퍼티를 사용합니다.

    예를 들어 MainWindow를 보면 Background, Width, Height 등 여러 가지 속성들도 의존 프로퍼티를 사용하고 있습니다.


    이제 사용 방법을 알아보겠습니다!


    먼저 아래와 같이 사용할 값을 등록합니다.


    1
    2
    public static readonly DependencyProperty MeProperty = DependencyProperty.Register("Me"typeof(string), typeof(MainWindow),
                                                            new PropertyMetadata(""new PropertyChangedCallback(MeChanged)), ValidateMe);
    cs


    1번째 인자 Me => 이름을 등록합니다.

    2번째 인자 typeof(string) => 사용할 타입을 입력합니다.

    3번째 인자 typeof(MainWindow) => MeProperty를 소유한 클래스를 입력합니다.

    4번째 인자 new PropertyMetadata("", new PropertyChangedCallback(MeChanged)) => ""는 초기값, MeChanged는 값이 변경되는 호출될 함수를 입력합니다.

    5번째 인자 ValidateMe => 값이 변경될 때 값을 검사할 함수를 입력합니다.


    4번째, 5번째는 선택입니다.


    이제 DependencyProperty에서 설정한 Me의 값을 설정하고 얻어올 수 있는 Get, Set을 만들어 줍니다.


    1
    2
    3
    4
    5
    public string Me
    {
        get { return (string)GetValue(MeProperty); }
        set { SetValue(MeProperty, value); }
    }
    cs


    다음으로 값이 변경되면 실행될 함수를 만들어 줍시다.


    1
    2
    3
    4
    5
    6
    7
    static void MeChanged(DependencyObject property, DependencyPropertyChangedEventArgs args)
    {
        MainWindow main = property as MainWindow;
     
        string value1 = args.OldValue as string;
        string value2 = args.NewValue as string;
    }
    cs


    위 함수에서 property 값은 DependencyProperty를 소유한 클래스의 값을 받고,

    args는 OldValues(입력되어있던 값), NewValue(새로 입력된 값) 등의 값을 얻어 올 수 있습니다.


    이 함수에서 사용자가 원하는 이벤트를 넣어 사용하면 됩니다.


    마지막으로 값을 검사할 함수를 만들어 줍니다.


    1
    2
    3
    4
    5
    static bool ValidateMe(object obj)
    {
        string str = obj as string;
        return str!=null;
    }
    cs


    위 함수에서는 입력받은 값을 검사합니다.


    반환 값이 false면 ArgumentException을 발생시킵니다.


    위와 같이 만들게 되면 아래처럼 값을 바꾸려 할 때


    1
    Me = "AA";
    cs


    ValidateMe에서 값을 검사하고, true가 반환되면 MeChanged가 호출됩니다.


    여기서 true를 반환해도 OldValue와 NewValue가 같을 경우 MeChanged는 호출되지 않습니다.


    여기까지, 간단하게 Dependency Property를 사용하는 방법을 알아봤습니다.


    감사합니다.

    'Programming > C#' 카테고리의 다른 글

    [WPF] WindowChrome !  (0) 2020.03.20
    [WPF] ListView에 UserControl 넣기  (0) 2020.03.20
    Json.NET을 사용해보자!  (0) 2019.04.07
    [WPF] ListView에 데이터를 바인딩 해보자!  (0) 2019.03.07
    데이터처리를 쿼리로!? (1)  (0) 2019.03.05

    댓글

Designed by Tistory.