'TextBox'에 해당되는 글 2건

  1. 2010.03.29 Set Binding Source Update Timing Using UpdateSourceTrigger (3)
  2. 2010.02.27 Auto Complete TextBox using ComboBox

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


 이번 강좌에서는 포털 사이트에서 흔히 볼 수 있는 자동완성 기능을 구현하는 방법에 대해 소개합니다. 먼저 자동완성을 구현하기 위해 필요한 요소들을 살펴보면 검색어를 입력할 수 있는 TextBox와 검색 결과를 표현 할 수 있는 ListBox가 필요 하다는걸 알 수 있습니다. 이번시간에는 WPF에서 TextBox와 ListBox 컨트롤을 동시에 포함하고 있는 컨트롤인 ComboBox를 이용해 자동완성을 구현 하는 방법에 대해 소개합니다.

ComboBox ControlTemplate

먼저 ComboBox의 ControlTemplate을 아래와 같이 정의하여 자동완성에 필요한 뷰를 구성합니다. 주의할 점은 TextBox의 이름을 ComboBox가 내부적으로 사용하는 이름인 PART_EditableTextBox로 지정할 경우 SelectedItem과 내부적으로 바인딩 되기 때문에 다른 이름을 사용합니다.

그리고 TextBox에서 TextChanged이벤트가 발생할때 아래와 같이 처리해 줍니다.

위와 같이 코드를 정의하면 사용자가 TextBox에 어떤 텍스트를 입력할때 AutoComplate 이벤트를 호출하여 자동완성 목록에 표현될 아이템을 필터링 하게 됩니다. 그리고 키보드를 이용해 자동완성 목록을 선택 할 수 있도록 OnPreviewKeyDown메서드를 아래와 같이 재정의 합니다.

자동완성 기능을 사용하기 위해서는 아래와 같이 ItemSource에 자동완성에 사용할 데이터를 입력하고, AutoComplate이벤트에서 필터링 여부를 리턴 하면됩니다.

이번시간에 구현한 자동완성은 ComboBox를 기반으로 구현되었기 때문에 SelectedItem이나, SelectedValue 속성을 통해 선택된 객체에 대한 접근할 수 있습니다. 이번시간에 구현한 자동완성을 응용한 예제는 샘플 자료실에서 확인 하실 수 있습니다.


신고