RelayCommand och RelayCommand<T>

RelayCommand och RelayCommand<T> är ICommand-implementationer som kan exponera en metod eller en delegat för vyn. Dessa typer fungerar som ett sätt att binda kommandon mellan elementen viewmodel och UI.

Plattforms-API:er:RelayCommand, RelayCommand<T>, IRelayCommand, IRelayCommand<T>

Så här fungerar de

RelayCommand och RelayCommand<T> har följande huvudfunktioner:

  • De tillhandahåller en basimplementering av ICommand gränssnittet.
  • De implementerar också gränssnittet IRelayCommand (och IRelayCommand<T>), som exponerar en NotifyCanExecuteChanged-metod för att utlösa händelsen CanExecuteChanged.
  • De tillhandahåller konstruktorer som tar delegater som Action och Func<T>, vilket gör det möjligt att kapsla in vanliga metoder och lambda-uttryck.

Arbeta med ICommand

Följande visar hur du konfigurerar ett enkelt kommando:

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++;
}

Och det relativa användargränssnittet kan då vara (med 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>

Button är bunden till ICommand i vymodellen, som omger den privata metoden IncrementCounter. TextBlock Visar värdet för Counter egenskapen och uppdateras varje gång egenskapsvärdet ändras.

Exempel

  • Kolla in exempelappen (för flera gränssnittsramverk) för att se MVVM Toolkit i praktiken.
  • Du kan också hitta fler exempel i enhetstesterna.