CommunityToolkit.Mvvm ObservableProperty 착각하기 쉬운 팁

ObservableProperty 어트리뷰트를 처음 사용할 때 흔히 착각할 수도 있는 부분입니다.
(제가… :slight_smile: )


기본적으로 ObservableObject 안에서 ObservableProperty 어트리뷰트가 선언된 변수는 코드 자동생성 부분을 통해 OnChanging/OnChanged 메서드가 아래처럼 만들어집니다.

// <summary>Executes the logic for when <see cref="User"/> is changing.</summary>
[global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", "8.0.0.0")]
partial void OnUserChanging(global::System.Collections.Generic.List<global::TestApp1.Local.Model.UserModel> value);

보시는 것 처럼 partial 형식으로 생성되기 때문에 내부적으로도 이 메서드가 호출되는데요.

그래서 우리는 MainViewModel 안에서 partial을 사용하여 OnUserChanged 메서드를 생성하면 됩니다. 하지만 저는 구조를 잘 이해하지 못한 상태에서 습관적으로 private 메서드를 만드는 바람에 메서드를 연결시키는데 고생을 했습니다.


partial을 사용한 올바른 방법

public partial class MainViewModel : ObservableObject
{
    [ObservableProperty]
    private UserModel user;

    partial void OnUserChanging(UserModel name)
    {

    }

    partial void OnUserChanged(UserModel name)
    {

    }
}

읽어주셔서 감사합니다.
:smile:

7개의 좋아요