다음을 통해 공유


RelayCommand 및 RelayCommand<T>

RelayCommand<T> ICommand 메서드 RelayCommand 또는 대리자를 뷰에 노출할 수 있는 구현입니다. 이러한 형식은 viewmodel과 UI 요소 간에 명령을 바인딩하는 방법으로 작동합니다.

플랫폼 API: RelayCommand, RelayCommand<T>, IRelayCommandIRelayCommand<T>

작동 방식

RelayCommand 다음과 RelayCommand<T> 같은 주요 기능이 있습니다.

  • 인터페이스의 기본 구현을 ICommand 제공합니다.
  • 또한 이벤트를 발생시키는 메서드를 노출하는 (및) 인터페이스를 구현 IRelayCommand 합니다 NotifyCanExecuteChanged CanExecuteChanged.IRelayCommand<T>
  • 표준 메서드 및 Func<T>람다 식의 래핑을 허용하는 대리자 및 같은 Action 대리자를 사용하는 생성자를 노출합니다.

작업 중 ICommand

다음은 간단한 명령을 설정하는 방법을 보여줍니다.

public class MyViewModel : ObservableObject
{
    public MyViewModel()
    {
        IncrementCounterCommand = new RelayCommand(IncrementCounter);
    }

    private int counter;

    public int Counter
    {
        get => counter;
        private set => SetProperty(ref counter, value);
    }

    public ICommand IncrementCounterCommand { get; }

    private void IncrementCounter() => Counter++;
}

그런 다음 상대 UI는 (WinUI XAML 사용) 될 수 있습니다.

<Page
    x:Class="MyApp.Views.MyPage"
    xmlns:viewModels="using:MyApp.ViewModels">
    <Page.DataContext>
        <viewModels:MyViewModel x:Name="ViewModel"/>
    </Page.DataContext>

    <StackPanel Spacing="8">
        <TextBlock Text="{x:Bind ViewModel.Counter, Mode=OneWay}"/>
        <Button
            Content="Click me!"
            Command="{x:Bind ViewModel.IncrementCounterCommand}"/>
    </StackPanel>
</Page>

private Button IncrementCounter 메서드를 래핑하는 ICommand viewmodel의 바인딩입니다. 속성 TextBlock 값이 표시되고 속성 값 Counter 이 변경 될 때마다 업데이트됩니다.

예제

  • 샘플 앱(여러 UI 프레임워크의 경우)을 확인하여 작동 중인 MVVM 도구 키트를 확인합니다.
  • 단위 테스트에서 더 많은 예제를 찾을 수도 있습니다.