CommunityToolkit 같은경우 우리 닷넷회원님들께서 많이 언급하신 라이브러리기도 합니다.
저도 MvvmLight, Prism 등 여러 라이브러리를 사용해보았고 CommunityToolkit도 정말 잘 사용하고 있습니다 (Microsoft.Toolkit 등 여러 라이브러리가 혼재해서 제 프로그램 내역들도 정말 엉망진창이네요…)
아래는 닷넷데브에서 닷넷 회원분들께서 강좌를 올렸던 내용들입니다. 좋은분들이 좋은내용 적으신거니 한번 또 봐도 좋을듯 해요…
(관련 글을 올리신분들께 감사드립니다.)
아무튼 요근래 CommunityToolKit을 사용하는 주된 이유중에 하나는 Code Generator가 아닐까 하는데요.
private string _greeting = string.Emtpy;
public string Greegting
{
get => _greeting;
set => SetProperty(ref _greeting, value);
}
private ICommand _testCommand;
public ICommand TestCommand =>
_testCommand ?? (_testCommand = new RelayCommand(얄라리얄라); // 물론 다른방식으로 구현하기도 하지요?
Code Generator 즉 툴킷어트리뷰트를 사용하지 않을때, 규모가 작은 ViewModel 경우 감당가능한 정도지만, 수많은 프로퍼티에 커맨드를 구현하고 있노라면 유지보수 측면도, 신규개발적인 측면에서도 매우 피로한 상황이 생기게 됩니다… (저만 그런건지…)
그래서 아래와 같이 사용하는 경우가 많죠
// 위에 partial 뷰모델이겠죠~~?
[ObservableProperty] private string _greeting = string.Empty;
[RelayCommand]
private void 얄라리얄라() {}
너무나도 보기가 편해졌기도 했고, 사용도 편리해진 것 같아요.
심지어 _greeting에서 생성된 Greeting 도 접근이 가능해요!, 또한 xaml에도 얄라리얄라커맨드를 작성할 수 있죠!
private void 얄라리얄라()
{
Greeting = "사랑해요";
}
이제 저희 회사 프로그램에 한번 리팩터링 겸 진행을 해볼까? 하니 안되는 겁니다(헉)
분명 어트리뷰트는 작성했는데… 어… 테스트 프로젝트에서는 됐는데 왜 여기선 안될까요?
아래사진은 Framework 4.6.2에서의 소스코드 사진입니다.
아마 저뿐만 아니라 몇몇 분들도 잉~~ 이건 Core3.1 이상만 되는건가보다… 그냥 기존대로 사용해야지… 라고 생각하고 저처럼 (몇년동안) 기존에 사용했던 대로 사용하셨을 것 같아요.
그런분들중 몇몇분은 아 그래도 저거 쓰고싶은데 라고 생각하시는 분들이 있을 것 같아서 팁글을 올려보아요.
-
새 프로젝트를 생성해요. 새 프로젝트는 Framework로 생성하지말고, Core쪽으로 생성해줍니당 ()
-
이렇게 생성이 되었다면 프로젝트 파일을 편집합니다.
-
요기서 TargetFramework를 변경해요.
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net462</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UseWPF>true</UseWPF>
</PropertyGroup>
- 저는 여기서 langversion까지 변경해요. 전 11로 변경해보도록 하겠습니다. 물론 lastest나 다른 것으로 지정하셔도 상관 없지…않나 생각해요. 근데 전 딱 픽스해야 다른분들 협업할때도 피곤하지가 않아서 고정하는 편입니다.
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net462</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UseWPF>true</UseWPF>
<LangVersion>11</LangVersion>
</PropertyGroup>
-
그뒤 Community Toolkit을 받은 후 뷰모델을 생성해봅니다. 이후 ObservableObject를 상속받아요. 물론 ViewModelBase를 새로만들어서 뭐 하는건 생략하겠습니다. 그리고
-
이후 한번 코드를 작성해볼게요~~
야호~~ 정상적으로 생성이 되었어요. 디자인에서도 잘 적용되구요. 실제로 빌드가 잘되고 작동이 잘 되는지 한번 확인해봅시다!
- Framework 4.6.2가 아닌거 아닌가요?
→ 최대 4.6.2가 설치된 환경에서도 테스트 진행해보니 잘 돌아가더라구요.
애로사항이 있어 Core로 넘어가지 못하는 분들께 좋은 팁이 되셨길 바랍니다.
잘못된 정보나 개선할 점이 있으면 댓글 남겨주시면 정정하겠습니다. 그게 제 성장이 되는 길이기도 하니까요. 감사합니당~~
(적고보니 별거 아니기도하네요… 으윽)