본문 바로가기
C#/C# WPF

WPF MVVM

by TcTT 2018. 8. 1.
반응형

WPF MVVM패턴에대해 공부하면서 배운것을 정리해두는 글이다.



MVVM에대한 이미지를 검색하면 위와 비슷하게생긴 이미지가 많이있다.

그중에서 WPF MVVM에 정확히 맞는 이미지는 위 사진이다.


DATA 부분

1. View(XAML)은 Binding을 통해 ViewModel과 연결된다.

2. ViewModel은 Model과 연결되어 각종작업(DB처리, 비지니스로직) 을 처리한다(Model에서 set함수 사용)

3. Model에서 처리된 값을 ViewModel에서 Read한다. (VIewModel에서 get함수 사용)

4. ViewModel에서 Read된값은 Binding(2Way)로 View에 업데이트 된다.



COMMANDS

사실 이부분이 가장 어려웠다. 

이전에 WindowsForm에서 개발시엔 버튼 이벤트는 더블클릭하여 디자인파일에 .cs에 코딩했지만,

디자인파일 .cs에 코딩시 WPF 의 꽃인 MVVM패턴에 위배되기때문에, 

이벤트를 ViewModel에서 핸들링해야한다.

ViewModel에서 핸들링하기위한 방법중 알아본 방식은

EventTrigger, ACB, Markup, EventCommand 방식이 있고, 각각 장,단점이 존재한다.

Commands에 관한글은 다시 자세하기 포스팅할 예정이다.

위의 그림에선 View와 ViewModel사이에 Commands를 사용하여 View에 이벤트에 관한 코딩을하지말고,

ViewModel에서 처리하는 방식이란걸 이해하면 된다.

위의말은 Test.xaml.cs 파일엔 초기화함수만있고(자동으로생성됨) 그 외 다른 코드를 입력해선 안된다.



Notifications

바인딩 사용시 프로퍼티 벨류가 변경시 발생되는 이벤트 정도로 이해하면 될거같다.

소스코드가없으면 설명하기 힘드니 예를 들어 설명해본다.

1. View 화면에 TextBox에 Text 값을 "2" 로 입력.

2. View 화면에서 TextBox에 Text 값을 "6" 으로 변경하면,

3. View 와 ViewModel이 DataBinding으로 ViewModel로 전해지고, ViewModel은 연결된 Model의 set함수를 통해 값 변경이 이뤄진다.

4. 값 변경후 PropertyChangedEventHandler 호출

5. ViewModel에서 PropertyChangedEventHandler 에 인자인 프로퍼티네임으로 ViewModel 의 get함수로 변경된 값을 가져오고, Binding을통해 View화면에 업데이트 시켜줌.





두서없이 적은 느낌이지만.

WPF를 사용한다면, WPF의 꽃인 Binding을 사용해야하고, Binding을 사용하기위해

MVVM 패턴을 적용하여 개발해야한다.

MVVM 패턴 적용시 이벤트를 ViewModel에서 핸들링해야하는 번거러움이있지만,

재사용성을 높힐 수(아직 잘모르겠음..) 있다고한다.


반응형

'C# > C# WPF' 카테고리의 다른 글

WPF Marquee Text  (0) 2019.06.18
[WPF] 3D 그래픽 성능 관련  (1) 2019.03.18
개발방식 WPF로 변경  (0) 2018.07.20