language/C#

바인딩

ETIT 2020. 6. 25. 18:15

 

https://docs.microsoft.com/ko-kr/dotnet/desktop-wpf/data/data-binding-overview

 

데이터 바인딩 개요 - WPF

.NET Core용 Windows Presentation Foundation에서 프로젝트에 추가할 수 있는 다양한 데이터 소스에 관해 알아봅니다. 데이터 소스를 XAML 요소에 바인딩하여 동적 앱을 만들 수 있습니다.

docs.microsoft.com

ViewModel은 View의 상위단이라고 생각하고 


ViewModel의 추상적인 부분을 View가 구체적으로 만들어준다는 것이다.


View와 ViewModel 간 의존성을 제거하기 위해 MVVM 패턴이 도입되었는데

View에서 Model의 내용을 연결하기 위해서는 어떠한 형태로든 ViewModel 에 대한 정보를 알아야만 한다.

불특정 타입에 대한 의존성을 느슨하게 결합할 수 있는 형태의 그 무언가가 필요하다.

(이 기능을 위해서라도 ViewModel이 View를 추상화해야하는 필요성이 대두된다. 그리고 이것도 엄밀히 따지자면 느슨하다고는 할 수는 없다.)

그리고 이 결합에 대한 인프라로 제공되는 것이 바로 Binding 이며 이 Binding의 기준이되는 추상화된 객체가 필요한데
이것을 문맥이라고 생각하면된다.


WPF에서는 이러한 문맥을 FrameworkElement 의 DataContext 라는 property로 정의해놓고 있다.

즉, UI 의 표현과 관련된 속성을 가지는 클래스 레벨인 FrameworkElement 클래스에서

 

문맥 관리를 위해 object 형식의 DataContext 라는 property를 정의해 두고

(실은 DataContext 자체는 닷넷의 일반 property가 아니라 object 형식의 DependencyProperty이다.)

 "Context"란 "어떤 객체를 핸들링하기 위한 접근 수단"의 의미를 가집니다. 

이를 문맥 요소로 사용하는 것이다.


Data Context란?
     - 데이터 바인딩을 할 때, 하나의 객체를 여러 개로 바인딩을 하려면 Binding ElementName을 반복해서 사용하는

       번거로움을 가지고 있습니다. 

     - 그래서, 위와 같은 문제를 해결하기 위해, 부모 엘리먼트에 Data Context를 줘서 그 부모를 데이터 바인딩을

       할 수 있게 해줍니다.