본문 바로가기

[C#] WPF에 대해서 알아보자 #1 WPF를 왜 쓰지? , DataContext

I'm 영서 2023. 3. 7.
반응형

해당 포스팅은

르노베유의 WPF MVVM 일주일만에 배우기 책을 참고하여 작성하였다.

http://www.yes24.com/Product/Goods/53906004

 

WPF MVVM 일주일 만에 배우기 - YES24

필자의 십 수년간의 강의 경험을 최적화하여 집필한 가장 얇은 WPF 개발 서적으로 군더더기 없이 WPF를 빨리 배울 수 있다. 간단한 연습 과제와 따라 하기 방식의 해당 풀이를 통해 컨트롤 및 레이

www.yes24.com

 

기존 Windows Form에는 치명적인 문제점이 있다.

디자인코드와 논리코드가 섞여있다는 점인데. 

이는 웹개발을 생각해보면 딱 느껴진다.

웹은 디자인을 하는 HTML과 CSS 개발을 위한 JavaScript 가 나누어져 있다.

 

때문에 MS는 Windows Form의 치명적인 단점을 개선하고자 XAML을 만들어냈다.

 

XAML(XML Allpication Markup Language); 자멜

자멜파일은 XML이며 더 강력한 HTML이다. 

WPF는 논리코드와 디자인코드를 분리한다.

  • 애니메이션까지 모두 포함하는 외관을 구현하는 XAML파일
  • 화면의 기능적 로직을 설명하는 코드비하인드파일

 

실제로 하나의 WPF_Screen이라는 이름으로 WPF스크린을 생성하면

WPF_Screen.xaml (외관) , WPF_Screen.xaml.cs (코드 비하인드) 두개의 파일이 생성된다.

이렇게 분리된 파일을 사용하면 디자이너와 개발자는 같은 프로젝트에서 각자 자신의 파일로 작업할 수 있다.

 

그리고 분리와는 별개로 WPF는 추가 기능을 도입했다.

  • 컨트롤 조합 : 대부분의 컨트롤은 다른 컨트롤을 호스팅할 수 있다. ListBox컨트롤 내부에 버튼을 만들거나 Button 컨트롤 내부에 어떤 도형이나 비디오 까지도 넣을 수 있다.
  • 모든 화면 해상도 적용 : Windows Form처럼 픽셀을 사용해 작업하면 프로그램을 해상도가 높아질수록 작아진다. WPF는 화면 해상도와 독립적인 실제 크기 상태를 나태내는 장치 독립적 픽셀을 사용한다.

 

그리고 WPF에서는 

데이터 바인딩을 지원하는데 데이터 바인딩을 지원하기 위해 DataContext를 고안했다.

DataContext를 설정하면 UI 요소와 데이터 소스 간에 데이터 바인딩을 설정할 수 있다.

데이터 소스는 일반적으로 ViewModel, Model 또는 컬렉션으로.

DataContext를 설정하면 데이터 바인딩 엔진이 DataContext에서 속성을 찾아 UI 요소에 표시할 데이터를 검색한다.

바인딩에 소스 데이터 객체를 지정하지 않으면 소스가 현제 데이터 컨텍스트로 간주된다.

 

아래에 작성한 XAML과 코드비하인드는 동일하다.

코드비하인드

<StackPanel DataContext="...">
    <TextBox Text ="{Binding Name}"/>
    <Label Content ="{Binding SSN}"/>
</StackPanel>

XAML

this.DataContext= ...;

실제로 모든 컨트롤은 object유형의 DataContext속성을 갖는데, 바인딩 식에 소스에 대한 언급이 없으면 소스는 컨트롤의 DataContext 속성으로 간주되고, DataContext가 할당되지 않으면 부모 컨트롤의 Datacontext가 사용된다

 

반응형

댓글