How to find out DefaultUpdateSourceTrigger by coding?

김정환(John.Kim)
OldbeeDev
Published in
3 min readFeb 5, 2020
©Samantha Hurley

WPF Data Binding에서 UpdateSourceTrigger는 다음과 같이 4가지 옵션이 있습니다.

  1. PropertyChanged : Target Property 입력값이 변경될 때마다.
  2. LostFocus : Target 객체에서 다른 객체로 포커스가 이동될 때.
  3. Explicit : 명시적으로 UpdateSource() 메소드를 호출할 때만.
  4. Default : Target Property 별로 정의된 바인딩 기본값에 따름. 대부분은 PropertyChanged이고, TextBox.Text 속성은 LostFocus가 기본값임.

4번 Default 인 경우, “대부분은 PropertyChanged가 기본값” 이라고 얘기하고 있지만 MSDN에는 이 기본값에 대해 구체적인 정보가 없는 것 같습니다. 대신 코딩으로 조사해볼 수는 있습니다.

DependencyProperty.GetMetadata 메소드

CheckBox.IsChecked 속성의 metadata를 알아내려면 DependencyProperty인 IsCheckedProperty 에 대해 GetMetadata()를 호출합니다. CheckBox type을 파라미터로 넘기고 리턴값을 FrameworkProperyMetadata 로 캐스팅해야 합니다. 리턴되는 metadata에는 DefaultUpdateSourceTrigger 뿐만 아니라 BindsTwoWayByDefault (속성이 기본적으로 양방향 바인딩 되는지 여부) 등의 정보도 포함되어 있습니다.

WPF 기본 컨트롤 뿐만 아니라 DevExpress 같은 상용 컴포넌트의 컨트롤에 대해서도 같은 방식으로 DefaultUpdateSourceTrigger 및 BindsTwoWayByDefault를 알아낼 수 있습니다.

만약 TextBox.Text 속성에 바인딩된 변수가 입력 즉시 갱신되기를 바란다면 아래와 같이 명시적으로 UpdateSourceTrigger=PropertyChanged 를 지정해주어야 합니다.

<TextBox Text="{Binding Name, 
Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

참고로 TextBox.Text는 기본적으로 양방향 바인딩이 되므로 Mode=TwoWay 는 불필요한 코드가 되겠습니다.

끝. 고맙습니다 :)

ps) 왠지 미디엄에서는 제목을 영어로 달아야 할 것 같은 분위기가 ㅎㅎㅎ

References :

--

--