Binding 클래스의 UpdateSourceTrigger 속성은 바인딩 소스 업데이트 타이밍을 결정하는 값을 가져오거나 설정할때 사용되는 속성입니다.

 

Xaml에서는 아래와 같이 사용합니다.

 

 

 Text="{Binding Description,UpdateSourceTrigger=PropertyChanged}" 

 

 

 

UpdateSourceTrigger의 열거형식은 아래와 같습니다.

 

멤버 이름 

 설명

 Default

 바인딩 대상 속성의 기본 UpdateSourceTrigger 값입니다. Text속성의 기본값은 LostFocus이지만, 대부분의 종속성 속성의 기본값은 PropertyChanged입니다.

종속성 속성의 기본 UpdateSourceTrigger 값을 확인하는 프로그래밍 방식은 GetMetadata를 사용하여 속성의 속성 메타데이터를 가져온 다음 DefaultUpdateSourceTrigger 속성의 값을 확인하는 것입니다.

 PropertyChanged

 바인딩 대상 속성이 변경될 때마다 바인딩 소스를 즉시 업데이트합니다.

 LostFocus

 바인딩 대상 요소가 포커스를 잃을 때마다 바인딩 소스를 업데이트합니다.

 Explicit

 UpdateSource 메서드를 호출할 때만 바인딩 소스를 업데이트합니다.

예를 들들면 아래와 같은 코드입니다.


 BindingExpression be = textBox1.GetBindingExpression(TextBox.TextProperty);
 be.UpdateSource();

 

 

 [참조 : MSDN]

 

 

 

 시나리오 마다 다르겠지만, 대부분의 컨트롤을 사용할때에는 Default 값을 사용하면 문제가 보통 없습니다만 TextBox의 Text 속성에 바인딩할 때,

 

포커스를 잃을 때만 소스가 업데이트 되기 때문에 문제가 발생합니다.

 

 예를들어 TextBox에 사용자가 문자열을 입력한 후, 수정 버튼을 클릭하는 시나리오에서 수정 버튼은 Text 속성에 바인딩 되어 있는 소스의 값이 String.IsNullEmpty값이

 

true일때만 활성화시킨다면 문제가 발생합니다.

 

 위의 표의 설명과 같이 Text의 Default 값은 LostFocus(포커스를 잃을 때)이기 때문입니다.

 

 TextBox Text 속성에 바인딩 할때에 PropertyChanged 속성을 사용하면 문제가 해결합니다. 

 

 

단 MSDN에서는 이렇게 얘기합니다.

 

 키 입력이 있을 때마다 업데이트하면 성능이 떨어지고, 일반적으로 사용자가 새 값을 커밋하기 전에 입력 오류를 수정하고 백스페이스 키를 누를 수 있는 기회가 없어집니다.

[참조 : MSDN - Binding.UpdateSourceTrigger]

 

 

 

 

 

 

 

+ Recent posts