-
[WPF] 의존 프로퍼티!?Programming/C# 2019. 3. 8. 23:21
안녕하세요. 간단하게 따라 할 수 있는 예제를 만드는 Teemol입니다!
오늘의 예제는 WPF Dependency Property의 간단한 사용법만 알려드리려고 합니다.
여기서 Dependency Property(의존 프로퍼티)란,
의존 속성 값이 변경되면 자동으로 어떤 것을 처리하게 할 수 있게 해주는 것인데,
애니메이션, 스타일, 데이터 바인딩 등에서 사용된다고 합니다.
WPF에서 화면을 구성하는 다양한 컨트롤들도 의존 프로퍼티를 사용합니다.
예를 들어 MainWindow를 보면 Background, Width, Height 등 여러 가지 속성들도 의존 프로퍼티를 사용하고 있습니다.
이제 사용 방법을 알아보겠습니다!
먼저 아래와 같이 사용할 값을 등록합니다.
12public 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을 만들어 줍니다.
12345public string Me{get { return (string)GetValue(MeProperty); }set { SetValue(MeProperty, value); }}cs 다음으로 값이 변경되면 실행될 함수를 만들어 줍시다.
1234567static 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(새로 입력된 값) 등의 값을 얻어 올 수 있습니다.
이 함수에서 사용자가 원하는 이벤트를 넣어 사용하면 됩니다.
마지막으로 값을 검사할 함수를 만들어 줍니다.
12345static bool ValidateMe(object obj){string str = obj as string;return str!=null;}cs 위 함수에서는 입력받은 값을 검사합니다.
반환 값이 false면 ArgumentException을 발생시킵니다.
위와 같이 만들게 되면 아래처럼 값을 바꾸려 할 때
1Me = "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