Freigeben über


RelayCommand und RelayCommand<T>

Bei RelayCommand und RelayCommand<T> handelt es sich um ICommand-Implementierungen, die eine Methode oder einen Delegaten für die Ansicht bereitstellen können. Diese Typen dienen dazu, Befehle zwischen dem ViewModel und Benutzeroberflächenelementen zu binden.

Plattform-APIs: RelayCommand, RelayCommand<T>, IRelayCommand, IRelayCommand<T>

Funktionsweise

RelayCommand und RelayCommand<T> haben die folgenden Hauptfunktionen:

  • Sie bieten eine Basisimplementierung der ICommand-Schnittstelle.
  • Sie implementieren auch die Schnittstelle IRelayCommand (und IRelayCommand<T>), die eine NotifyCanExecuteChanged-Methode bereitstellt, um das CanExecuteChanged-Ereignis auszulösen.
  • Sie stellen Konstruktoren zur Verfügung, die Delegaten wie Action und Func<T> annehmen, die das Umbrechen von Standardmethoden und Lambdaausdrücken ermöglichen.

Funktioniert mit ICommand

Im Folgenden wird gezeigt, wie Sie einen einfachen Befehl einrichten:

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

Und die relative Benutzeroberfläche könnte dann sein (mit 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 ist im ViewModel an ICommand gebunden, das die private IncrementCounter-Methode Umschließt. TextBlock zeigt den Wert der Counter-Eigenschaft an und wird jedes Mal aktualisiert, wenn sich der Wert der Eigenschaft ändert.

Beispiele

  • Sehen Sie sich die Beispiel-App (für mehrere Benutzeroberflächen-Frameworks) an, um das MVVM-Toolkit in Aktion zu sehen.
  • Weitere Beispiele finden Sie auch in den Komponententests.