개발공부/WPF

[WPF] 데이터 바인딩 (Data Binding) 이란

개발자 찐빵이 2021. 11. 9. 23:35
728x90

데이터 바인딩

앱 UI와 해당 UI가 표시하는 데이터를 연결하는 프로세스.

데이터 바인딩 사용하는 이유

데이터 값에 변화가 필요할 때 사용한다.

예시

  • 데이터 값이 변경되어 UI에도 변경 사항이 반영되어야 할 때
  • UI에서 데이터 값을 변경되어 내부 데이터가 자동으로 업데이트되어야 할 때

데이터 흐름 방향

소스 : 데이터 변수
타깃 : UI에 보여지는 부분

1. OneWay Binding

소스가 변경될 때마다 타깃이 갱신된다.

2. TwoWay Binding

타깃이나 소스 둘 중에 한 쪽이 변경되면 서로 갱신한다.

3. OneWayToSource

타깃이 변경될 때마다 소스가 갱신된다.

4. OneTime

바인딩 클래스가 인스턴스화될 때 한 번 타깃에 반영되고 그 뒤로 소스가 변경되어도 타깃에 반영되지 않는다.
물론 타깃이 변경되어도 소스에 반영되지 않는다.

사용방법

1. XAML에서 바인딩 사용하기

XAML 파일

<ComboBox x:Name="FruitComboBox"
                  ItemsSource="{Binding FruitsList}"
                  SelectedItem="{Binding Fruit}"/>

비하인드코드

 public partial class FruitStoreView : Window
 {
     public FruitStoreView()
    {
        InitializeComponent();
        DataContext = new FruitStoreViewModel();
    }
}

2. 비하인드 코드에서 바인딩 사용하기

XAML 파일

<ComboBox x:Name="FruitComboBox"/>

비하인드 코드

public FruitStoreView()
{
    InitializeComponent();
    var ViewModel = new FruitStoreViewModel();
    FruitComboBox.ItemsSource = ViewModel.FruitsList;
    FruitComboBox.SelectedItem = ViewModel.Fruit;
}

1, 2번 모두 ViewModel은 같다.

ViewModel

using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;

namespace StoreExample.ViewModel
{
    public class FruitStoreViewModel : INotifyPropertyChanged
    {
        public FruitStoreViewModel()
        {
            FruitsList = new List<string>();
            FruitsList.Add("Apple");
            FruitsList.Add("Banana");
            FruitsList.Add("Orange");

            Fruit = FruitsList.FirstOrDefault();
        }

        public List<string> FruitsList { get; set; }

        public string Fruit { get; set; }

        public event PropertyChangedEventHandler PropertyChanged;
    }
}
반응형