ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C# WPF에서 Binding(바인딩)이란?
    닷넷/WPF 2023. 4. 7. 18:17
    반응형

    WPF에서는 MVVM 패턴을 지키는 게 중요합니다. 개인적으로 생각하기에는 이 MVVM 패턴대로 만들지 않을 것이라면 개발 속도로 봤을 때나 유지보수 적으로 봤을 때나 그냥 윈폼(WinForms)으로 만드는게 낫습니다.

    따라서 바인딩은 MVVM 패턴을 지키며 WPF에서 애플리케이션을 만들 때 중요한 요소가 됩니다.

    왜냐하면 WPF에서 바인딩(Binding)은 데이터 소스와 UI 요소 간의 연결을 뜻하기 때문입니다. 즉, 뷰와 뷰모델의 연결점입니다.

     

    바인딩을 사용하면 소스의 데이터가 변경될 때 UI가 자동으로 업데이트되고, 반대로 UI에서의 변경 사항이 소스에 전달됩니다. 이렇게 함으로써 데이터와 UI 간의 동기화가 유지되어 개발자가 수동으로 UI를 업데이트할 필요가 없습니다.



    WPF에서는 XAML (eXtensible Application Markup Language)에 바인딩을 정의할 수 있습니다. 

    바인딩은 주로 속성(Property)에 연결되며 Binding 클래스를 사용해 구현됩니다. 바인딩은 단방향 또는 양방향으로 설정할 수 있습니다.

    예를 들어, WPF 애플리케이션에서 텍스트 상자의 내용을 ViewModel의 속성과 바인딩하려면 다음과 같은 XAML 코드를 작성할 수 있습니다.

    <TextBox Text="{Binding Path=ExampleProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

     

    여기서 Text 속성은 텍스트 상자의 내용을 나타내며, Binding 클래스를 사용해 ViewModel의 ExampleProperty 속성과 연결됩니다. Mode=TwoWay는 양방향 바인딩을 뜻하며, UpdateSourceTrigger=PropertyChanged는 소스의 속성 값이 변경될 때마다 UI가 업데이트되도록 설정합니다.


    그다음 뷰모델에서는 INotifyPropertyChanged 인터페이스를 구현해야 합니다. 

    이 인터페이스는 속성 변경 알림을 제공하며, 속성이 변경될 때마다 PropertyChanged 이벤트를 발생시켜 바인딩된 UI 요소를 자동으로 업데이트합니다.

     

    뷰모델에서 INotifyPropertyChanged 인터페이스를 구현하는 예시는 다음과 같습니다.

    using System.ComponentModel;
    using System.Runtime.CompilerServices;
    
    public class MyViewModel : INotifyPropertyChanged
    {
        private string _exampleProperty;
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        public string ExampleProperty
        {
            get { return _exampleProperty; }
            set
            {
                if (_exampleProperty != value)
                {
                    _exampleProperty = value;
                    OnPropertyChanged();
                }
            }
        }
    
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }

     

    이 예제에서는 ViewModel 클래스인 MyViewModel이 INotifyPropertyChanged 인터페이스를 구현하고 있습니다. ExampleProperty 속성은 뷰의 바인딩과 연결되며, 값이 변경되면 OnPropertyChanged 메서드를 호출해 PropertyChanged 이벤트를 발생시킵니다.

    이제 뷰모델을 뷰의 데이터 컨텍스트(DataContext)로 설정해야 합니다. 이렇게 하면 뷰에서 정의된 바인딩이 뷰모델의 속성과 자동으로 연결됩니다.

    public partial class MyView : Window
    {
        public MyView()
        {
            InitializeComponent();
            DataContext = new MyViewModel();
        }
    }

    위 예제에서 MyView는 뷰를 나타내는 클래스입니다. 생성자에서 MyViewModel의 인스턴스를 생성하고 뷰의 DataContext에 할당합니다. 이렇게 함으로써 뷰와 뷰모델 간의 바인딩이 설정됩니다.

    이제 뷰에서 정의한 XAML 바인딩이 뷰모델의 ExampleProperty 속성과 연결되며, 해당 속성이 변경되면 자동으로 UI가 업데이트됩니다.

    반응형

    댓글

Designed by Tistory.