RelayCommand e RelayCommand<T>
e RelayCommand
RelayCommand<T>
sono ICommand
implementazioni che possono esporre un metodo o un delegato alla visualizzazione. Questi tipi fungono da modo per associare i comandi tra il modello di visualizzazione e gli elementi dell'interfaccia utente.
API della piattaforma:
RelayCommand
,RelayCommand<T>
,IRelayCommand
,IRelayCommand<T>
Come funzionano
RelayCommand
e RelayCommand<T>
hanno le funzionalità principali seguenti:
- Forniscono un'implementazione di base dell'interfaccia
ICommand
. - Implementano anche l'interfaccia
IRelayCommand
(eIRelayCommand<T>
) che espone unNotifyCanExecuteChanged
metodo per generare l'eventoCanExecuteChanged
. - Espongono costruttori che accettano delegati come
Action
eFunc<T>
, che consentono il wrapping di metodi standard ed espressioni lambda.
Uso di ICommand
Di seguito viene illustrato come configurare un comando semplice:
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++;
}
E l'interfaccia utente relativa potrebbe quindi essere (usando XAML WinUI):
<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>
L'oggetto Button
viene associato all'oggetto ICommand
nel modello di visualizzazione, che esegue il wrapping del metodo privato IncrementCounter
. TextBlock
Visualizza il valore della Counter
proprietà e viene aggiornato ogni volta che il valore della proprietà cambia.
Esempi
- Vedere l'app di esempio (per più framework dell'interfaccia utente) per vedere MVVM Toolkit in azione.
- È anche possibile trovare altri esempi negli unit test.