다른 뷰모델에 있는 RelayCommand CanExecute에 신호를 주려면?

제목을 어떻게 지어야 할지 모르겠네요. 제가 MVVM은 잘 몰라서 말이죠 ㅠㅠ

이번에 아발로니아로 뭐 하나 만들어보고 있는데 (참고로 아발로니아는 이번이 처음이고 ReactiveUI 말고 CommunityToolkit 선택했습니다.) 한 뷰모델의 속성이 변경되면 다른 뷰모델에 있는 커맨드를 (비)활성화 시키려고 합니다. 대충 코드는 이렇습니다.

public sealed partial class InstallWimPageViewModel : PageViewModelBase {
    [ObservableProperty]
    [NotifyPropertyChangedFor(nameof(CanNavigateNext))]
    private string installWimPath = string.Empty;

    public override string Title => "Select install.wim path";
    public override string Description => "Select the path to the install.wim file.";
    public override bool CanNavigateNext => !string.IsNullOrWhiteSpace(InstallWimPath) && File.Exists(InstallWimPath);
    public override bool CanNavigatePrevious => false;
}
public sealed partial class MainWindowViewModel : ViewModelBase {
    private readonly PageViewModelBase[] pages = [new InstallWimPageViewModel()];
    private PageViewModelBase currentPage;

    public MainWindowViewModel() => currentPage = pages[0];

    public PageViewModelBase CurrentPage {
        get => currentPage;
        private set => SetProperty(ref currentPage, value);
    }

    private bool CanNavigateNext => CurrentPage.CanNavigateNext;
    private bool CanNavigatePrevious => CurrentPage.CanNavigatePrevious;

    [RelayCommand(CanExecute = nameof(CanNavigateNext))]
    private void NavigateNext() => CurrentPage = pages[Array.IndexOf(pages, CurrentPage) + 1];

    [RelayCommand(CanExecute = nameof(CanNavigatePrevious))]
    private void NavigatePrevious() => CurrentPage = pages[Array.IndexOf(pages, CurrentPage) - 1];
}

InstallWimPageViewModel의 CanNavigateNext 속성이 변경되면 MainWindowViewModel의 NavigateNext(Command)를 (비)활성화 시키고 싶은데 installWimPath에 NotifyCanExecuteChangedFor를 붙어려고 보니까 커맨드가 같은 클래스에 있어야 한다고 합니다. 이걸 어쩌면 좋을까요?

Messenger를 이용하시면 어떨까요?

3개의 좋아요

저는 아발로니아나, CommunityToolkit은 사용하지 않지만,
다른 ViewModel에 작업을 시킬때 Event를 사용하는 편입니다.

2개의 좋아요