'DataBinding'에 해당되는 글 2건

  1. 2010.03.29 Set Binding Source Update Timing Using UpdateSourceTrigger (3)
  2. 2010.02.27 RadioButtons and Data Binding

Introduction

이번시간에는 Data Binding을 구현할 때 Source Update Timing을 지정하는 방법에 대해 소개합니다. 일반적인 경우 Source Update Timing을 지정하지 않아도 해당 객체의 기본적인 Timing Rule에 따라 자동으로 지정되기 때문에 신경쓰지 않아도 되지만 간혹 Binding Timing지정을 필요한 상황이 이 있습니다.

대표 적인 예로 TextBox를 이용한 Data Binding을 구현할 때 일어나는 상황을 이야기 할 수 있습니다.

위 코드와 같이 두개의 TextBox에 DataBinding을 구현 했을때의 실행을 시켜보면 아래 동영상과 같이 TextBox에서 Focus가 사라진 후 Binding Source가 Update되는 것을 확인 할 수 있습니다.



TextBox의 경우 Binding Source Update Timing이 LostFocus이기 때문에 위와 같은 상황이 발생하는 것으로, 만약 텍스트가 입력되는 상황에서 실시간으로 데이터의 내용이 변경되기를 원한다면, DataBinding을 구현할 때 UpdateSourceTrigger를 직접 명시해주는 것으로 Timing을 지정할 수 있습니다. 아래 코드는 UpdateSourceTrigger를 PropertyChanged로 지정하여 Property의 내용이 갱신될 때마다 Source를 Update하도록 지정한 코드입니다.

그리고 아래 동영상은 UpdateSourceTrigger를 PropertyChanged로 지정했을때의 동작을 나타냅니다.



포커스를 잃지 않아도 TextBox에 내용이 변경될때마다 출력 내용이 갱신되는것을 확인하실 수 있습니다. TextBox의 경우 기본값이 LostFocus로 지정되어 있으며, 일반적인 DependencyProperty의 기본 UpdateSourceTrigger 속성은 PropertyChanged입니다.

만약 직접 구현한 DependencyProperty의 기본 UpdateSourceTrigger를 지정하고자 한다면 아래 코드와 같이FrameworkPropertyMetadata에서 DefaultUpdateSourceTrigger를 이용해 지정 할 수 있습니다.


신고

Introduction

이번 강좌는 WPF를 이용해 위 그림과 같이 RadioButton 컨트롤 목록을 구하고 데이터 바인딩을 구성하는 과정에서 발생할 수 있는 이슈와 이를 해결하는 방법에 대해 소개합니다. 일반적으로 RadioButton으로 목록을 구현하고자 할때 가장먼저 떠오르는 방법은 StackPanel을 이용해 구현하는 방법입니다.


Some Problems

한눈에 보기에는 별로 문제가 없어 보이지만, 위 코드에 특정 속성에 대하여 RadioButton의 체크 상태에 데이터 바인딩을 구성하고자 한다면 약간의 이슈가 발생 합니다. 대상 속성에 저장된 값은 하나지만, 비교 대상이 다수 이기 때문에 이를 위해 ValueConverter를 구현 해야합니다. ValueConverter를 적용한 코드는 아래와 같습니다.


위 코드를 통해 해결은 가능하지만 항목이 동적으로 추가가된다거나, 반대로 현재 선택된 값을 가져오고자 한다면 또 다시 아래와 같은 코드를 이용해 현재 선택된 값을 가져오는 과정이 필요합니다. 


이제 생각해볼 문제는 어떻게 하면 더 간단하고 명확하게 위와 같은 RadioButton 목록을 구현하는가에 대한 내용입니다.

Using ListBox Template

WPF에서 목록하면 가장먼저 떠오르는 컨트롤인 ListBox를 이용해 RadioButton목록을 구현하는 방법에 대해 소개합니다. ListBox는 어떤 타입이든지 목록으로 표현이 가능하고 아이템에 대한 템플릿을 정의 할 수 있기 때문에 보다 효과적으로 RadioButton 목록을 구현 할 수 있습니다. 아래는 RadioButton목록을 구현하기 위한 ListBox의 ItemContainerStyle입니다.



ListBoxItem Template을 RadioButton으로 정의 하고 RadioButton의 IsChecked속성을 ListBox의 IsSelected속성에 바인딩 합니다. 그리고 RadioButton의 Content속성에는 ListBox에 항목이 출력되도록 ContentPresenter를 추가합니다. RadioButton의 Focusable과 IsHitTestVisible 속성을 False로 지정한 이유는 RadioButton이 ListBox에서의 Selected여부에 따라서만 동작하도록 하기 위함입니다. 이제 위 스타일을 이용해 RadioButton 목록을 구현하면 아래와 같이 사용할 수 있습니다.


SelectedValue에는 바인딩 대상이 되는 속성을 입력하고, SelectedValuePath를 Content로 지정하게 되면 그림과 같이 아이템의 Content속성과 SelectedValue와 일치하는 항목이 체크되는것을 확인 하실 수 있습니다. 반대로 ListBox의 SelectedValue속성을 이용하면, 현재 선택된 RadioButton의 값을 가져올수 있습니다.


신고