최신 스타일의 WPF 를 하면서 간단히 느낌점

제임스님 책으로 WPF를 다시 공부하면서 느낀것지만
기존에 제가 알던 WPF 랑 차이가 많네요

원래 기존에 wpf 를 할때 는

ViewModel에서는 
private string pagetext ;
public string pagetext { get { return _pagetext; } set { SetProperty(ref _pagetext, value); } }
이렇게 선언하고
Text="{Binding pagetext }"
당연히 이렇게 했다면

이제는 이렇게 선언하고 
 [ObservableProperty]
 private string _MaxButtonICon;

 Icon="{Binding MaxButtonICon}"
이렇게 바인딩 할때 프로퍼티에 _ 를 붙이면 자동으로 _ 없애고 이름으로 바인딩을 할수있네요
처음에는 도대체 이게 왜 자동으로 되는지 이해가 안갔습니다.

Command 도 

 [RelayCommand]
 private void Btn(string parameter)

이렇게 메소드에 Attribute 를 주면  relay command 로 쓸수 있네요 

 <units:CloseButton Grid.Column="3"   Command="{Binding BtnCommand}" CommandParameter="Close" />
이런식으로 Command 를 붙여야 하네요 


그리고 ViewModel에서 윈도우 핸들러 얻을때는 

   public void OnLoaded(IViewable view)
   {
       _view = view;

IViewable  의존성을 받고 
 Window window = Window.GetWindow(_view.View);       이런식으로 핸들을 얻어야
윈도우를 제어할수 있네요 



그리고 vm 이 아닌 일반 이벤트 핸들러는 
Border border = GetTemplateChild("PART_Bar") as Border;
이런식으로 control 핸들러를 찾아서
border.MouseMove += Border_MouseMove; Code에서 이벤트 핸들러를 
걸어줬네요

그리고 ItemsPresenter,ControlTemplate 순수하게 외워야 할것들이 많네요 

등등 개발자가 원리를 이해하기 보다는 그냥 원칙을 외워야 하는 점이 많은것 같습니다.
물론 james 님의 framework 를 써서 그런것도 있지만 그냥 단순
처음에 공개된 github 소스만 보면 된다고 한 저자신을 반성합니다.
정말 거의 만들어진 소스만 보고 따라할수 있는것이 아니네요

james님의 Code가 정말 많은 고민과 원칙을 지킬려고 했던점이 인상깊네요

이 소스를 제가 100% 이해하는것 불가능할것 같고 50% 라도 이해해서
뭔가 만들수 있다면 좋을것 같네요

5 Likes

ObservableProperty, RelayCommand 속성은 CommunityToolkit.Mvvm에 포함된 속성입니다.

2 Likes

저도 @jamesnet214 님께 배운 WPF 방법대로 하니… 맘편하긴 합니다.


Nuget에서 jamesnet.Wpf 라이브러리 설치하시면 CommunityToolkit.Mvvm, Prism이 같이 설치가 됩니다.

그렇기 때문에 @jrchs 님께서 말씀하신대로 라이브러리에 포함된 기능입니다.

p.s jamesnet.Wpf는 .net framework도 지원하는데 해당 어트리뷰트를 사용하실 수 없습니다.

2 Likes

MVVM 방법으로 개발하면 약속과 추상이 너무 많아서 어렵더라구요.
그리고 요즘은 소서 생성기를 사용한 라이브러리를 사용하니 사용 설명서를 찬찬히 잘 읽어야 합니다. 그 안에 약속 혹은 규칙들이 있으니까요

2 Likes

도움이 되셨다니 다행입니다!
이렇게 언급해주셔서 감사합니다. 저도 책을 통해 많이 배웠습니다.

WPF는 20년 가까이 지속되어 온 플랫폼이기 때문에 그 과정 속에서 많은 시도와 변화가 있었습니다. 책에 모든 히스토리를 넣을 순 없었지만 함께 알고 싶은 내용들 위주로 최대한 담으려고 노력했던 것 같습니다.

튜토리얼 영상에서도 CustomControl 관련 내용을 아주 자세하게 설명하고 있으니 시리즈 모두 정주행 해보시는 것도 추천드립니다.

2 Likes