.NET MAUI - MVVM SourceGenerator

2022. 8. 17. 00:00MAUI

반응형

[ObservableProperty]

ObservableObject 에서 SetProperty 를 통해 값의 변경을 통지하는 역할을 대신한다.

[ObservableProperty]
private string? name;

위에 내용은 아래와 같다

public string? Name
{
    get => name;
    set => SetProperty(ref name, value);
}

 

종속 속성 알림

만약 Name 을 변경하였을때 FullName 이라는 다른 Property 또한 변경이 통지되어야 한다면 다음과 같이 한다.

[ObservableProperty]
[NotifyPropertyChangedFor(nameof(FullName))]
private string? name;

실제 코드로 구현 한다면 아래와 같다.

public string? Name
{
    get => name;
    set
    {
        if (SetProperty(ref name, value))
        {
            OnPropertyChanged("FullName");
        }
    }
}

종속 명령 알림

Property 의 변경이 Command 를 실행 시키는 경우

[ObservableProperty]
[NotifyCanExecuteChangedFor(nameof(MyCommand))]
private string? name;

실제 코드로 구현 한다면 아래와 같다.

public string? Name
{
    get => name;
    set
    {
        if (SetProperty(ref name, value))
        {
            MyCommand.NotifyCanExecuteChanged();
        }
    }
}

 

유효성 검사 요청

ObservableValidator 를 상속해야함. NotifyDataErrorInfo 를 통해 수행 가능하다.

[ObservableProperty]
[NotifyDataErrorInfo]
[Required]
[MinLength(2)] // Any other validation attributes too...
private string? name;

다음과 같이 구현 된다.

public string? Name
{
    get => name;
    set
    {
        if (SetProperty(ref name, value))
        {
            ValidateProperty(value, "Value2");
        }
    }
}

 

메시지 전송

ObservableRecipient 를 상속해야함. NotifyPropertyChangedRecipients를 통해 수행 가능 한다.

[ObservableProperty]
[NotifyPropertyChangedRecipients]
private string? name;

다음과 같이 구현 된다.

public string? Name
{
    get => name;
    set
    {
        string? oldValue = name;

        if (SetProperty(ref name, value))
        {
            Broadcast(oldValue, value);
        }
    }
}

 

관련영상

https://youtu.be/xUVrsEn1gqM

 

 

반응형