티스토리 뷰

반응형

2022.04.21 - [WPF .NET] - Microsoft.Toolkit.Mvvm을 이용한 간단한 프레임워크 part6 - 유효성 검사 추가

2022.04.15 - [WPF .NET] - Microsoft.Toolkit.Mvvm을 이용한 간단한 프레임워크 part5 - [ObservableProperty] 속성(2/2)

2022.04.14 - [WPF .NET] - Microsoft.Toolkit.Mvvm을 이용한 간단한 프레임워크 part5 - Service 추가(1/2)

2022.03.03 - [WPF .NET] - Microsoft.Toolkit.Mvvm을 이용한 간단한 프레임워크 part4 - LayerPopup 추가

2022.03.02 - [WPF] - Microsoft.Toolkit.Mvvm을 이용한 간단한 프레임워크 part3 - Busy 화면 구현

2022.02.24 - [WPF] - Microsoft.Toolkit.Mvvm을 이용한 간단한 프레임워크 part2 - Frame Navigation

2022.02.21 - [WPF] - Microsoft.Toolkit.Mvvm을 이용한 간단한 프레임워크 part1

Microsoft.Toolkit이 Windows Community Toolkit으로 통합이되었습니다. 그 과정에 MVVM 부분도 변경이되었는데..

업그레이드 과정과 몇가지 변경된 사항을 설명하도록 하겠습니다.

 

1. WpfFramework.csproj 수정

Nuget package 변경

    <!-- 제거
    <PackageReference Include="Microsoft.Toolkit.Mvvm" Version="7.1.2" />
    -->
	<PackageReference Include="CommunityToolkit.Mvvm" Version="8.0.0" />

CommunityToolkit.Mvvm은 .Net 6 이상 지원이기 때문에 프레임워크도 변경해야합니다.

<TargetFramework>net6.0-windows</TargetFramework>

.Net 6로 프레임워크를 변경하니 SqlClient도 버전 올려야하네요..ㅋ

<PackageReference Include="System.Data.SqlClient" Version="4.8.5" />

2. c# 코드 페이지에 using 문 수정

이전

using Microsoft.Toolkit.Mvvm.ComponentModel;
using Microsoft.Toolkit.Mvvm.Input;
using Microsoft.Toolkit.Mvvm.Messaging;

이후

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging;

3. ObservableValidator 변동 사항

이전

아래와 같이 사용하면, CompanyName 프로퍼티가 자동으로 생성되고, Required가 자동으로 적용이 되어서, 값이 없으면, 테두리가 빨간색으로 변했습니다.

        [ObservableProperty]
        [Required]
        [MaxLength(40)]
        private string _companyName;

이후

이제는 Validator가 유효성 검사를 하기위해서는 SetProperty에 유효성 검사 여부를 추가해 주어야 합니다. 그래서, 결국 SetProperty 메소드를 이용해야지만 유효성 검사를 할 수 있으니 자동 프로퍼티 생성은 사용할 수 없고 아래와 같이 private와 public를 만들어서 사용해야 합니다.

        private string _companyName;
        [Required]
        [MaxLength(40)]
        public string CompanyName
        {
            get { return _companyName; }
            set { SetProperty(ref _companyName, value, true); }
        }

아래는 SetProperty 코드로 validate 여부가 추가되어 있습니다.

    [RequiresUnreferencedCode("The type of the current instance cannot be statically discovered.")]
    protected bool SetProperty<T>([NotNullIfNotNull("newValue")] ref T field, T newValue, bool validate, [CallerMemberName] string propertyName = null!)
    {
        ArgumentNullException.ThrowIfNull(propertyName);

        bool propertyChanged = SetProperty(ref field, newValue, propertyName);

        if (propertyChanged && validate)
        {
            ValidateProperty(newValue, propertyName);
        }

        return propertyChanged;
    }

실행

수정된 Company Name만 Validate되는 것을 확인할 수 있습니다.

4. 소스

추가로 변동 사항이 있으면 이 포스트를 통해서 알려드리겠습니다.

GitHub - kaki104/WpfFramework at part8/update-windowscommunitytoolkit

 

GitHub - kaki104/WpfFramework

Contribute to kaki104/WpfFramework development by creating an account on GitHub.

github.com

 

반응형
댓글