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
(undIRelayCommand<T>
), die eineNotifyCanExecuteChanged
-Methode bereitstellt, um dasCanExecuteChanged
-Ereignis auszulösen. - Sie stellen Konstruktoren zur Verfügung, die Delegaten wie
Action
undFunc<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.