ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데이터 바인딩 (3)
    .NetFramWork/WPF 2022. 6. 27. 20:35

    Clear 버튼을 이용한 TextBox 컨트롤 지우기

    결과에서 볼 수 있듯 Clear 버튼을 클릭하면 데이터 원본 객체인 per 의 Name 과 Phone 의 모든 텍스트가 지워지지만 UI 에 변경이 적용되지 않는다.

    이것은 per.Name 이나 per.Phone 속성은 일반 .Net 속성이므로 속성의 변경(데이터 원본의 변경) 사실을 UI 에 동기화하지 못한다.

    private void eraseButton_Click(object sender, RoutedEventArgs e)

    {

       per.Name = ""; per.Phone = "";

    }

     

    이 코드에서 per 의 속성을 변경하지만 이 속성과 바인딩되어 있는 UI 는 변경되지 않는다.

    데이터 원본(원본 객체의 속성)의 변경을 UI 에 통보하기 위한 바인딩을 사용하려면 몇 가지 약속된 절차를 구현해야 한다.


    Clear 버튼으로 데이터 원본을 변경하고 UI에 동기화 하기

    이제 Clear 를 클릭하면 원본 객체의 변경이 UI 에 동기화 된다.

     

    이처럼 동작하기 위해서는 데이터 원본 객체의 속성(Name, Phone)은 성이 set(변경)될 때 변경 사실을 INotifyPropertyChanged 인터페이스를 통해 알려야 한다.

     

    INotifyPropertyChanged 는 하나의 이벤트 public event PropertyChangedEventHandler PropertyChanged 를 멤버로 가지고 있는 인터페이스로 set 프로퍼티에서 호출하도록 약속되어 있다.

     

    다음과 같이


    public string Name

    {

       get { return name; }

     

        set

        {

           name = value;

           if (PropertyChanged != null)

                 PropertyChanged(this, new PropertyChangedEventArgs("Name"));

          }

    }


    PropertyChanged 는 첫 인수로 데이터 원본 객체로

    두 번째 인수로 PropertyChangedEventArgs(“Name”)으로 이벤트를 발생시킨다.

     

    이때 “Name”은 데이터 원본에 참여하는 속성의 이름이다.

     

    이제 다음 코드는

     

    private void eraseButton_Click(object sender, RoutedEventArgs e)

    {

      per.Name = "";

      per.Phone = "";

    }   

     

    바인딩된 UI 를 변경한다.

     

    데이터 아일랜드라고 부르는 각 요소에 표현할 수 있는 리소스를 사용하면 데이터 원본을 C# 코드에서 설정하지 않고 XAML 코드에서 설정하고 사용할 수 있다.

    (WPF 의 리소스는 기존 리소스 개념보다 조금 확장된 개념으로 명명될 수 있는 데이터를 일반적으로 리소스라고 하며 기존의 사용되었던 리소스도 모두 리소스라고 한다.)

     

     

    리소스는 이제 x:Key 값 “person”을 사용하여 XAML 이나 C#에서 사용할 수있다.

     

    이제 바인딩 원본을 설정하기 위해 C# 코드를 사용하지 않고,

    다음과 같이 XAML 코드에서 바로 설정하여 사용했으며 Clear 버튼이 클릭되었을 시 person 객체를 변경하기 위해

    per = (Person)FindResource("person");

    처럼 리소스의 키값으로 “person” 객체를 찾는 FindResource() 메소드를 이용하여 XAML 상의 객체의 참조를 찾고

    per.Name = "";

    per.Phone = "";

    처럼 변경한다.

     

    데이터 원본을 명시적으로 바인딩 문법을 사용하여 설정할 수 있으며 이때는 부모 요소의 DataContext 에 설정된 데이터 원본보다 우선한다.

     

    '.NetFramWork > WPF' 카테고리의 다른 글

    데이터 바인딩 (4)  (0) 2022.06.28
    데이터 바인딩 (2)  (0) 2022.06.27
    데이터 바인딩(1)  (0) 2022.06.27
    버블링 과 터널링 (라우트된 이벤트)  (0) 2022.06.24
    레이아웃 <Grid>  (0) 2022.06.23

    댓글

Designed by Tistory.