RelayCommand a RelayCommand<T>
RelayCommand<T>
Jedná se ICommand
o RelayCommand
implementace, které můžou vystavit metodu nebo delegáta zobrazení. Tyto typy fungují jako způsob, jak svázat příkazy mezi prvky viewmodelu a uživatelského rozhraní.
Rozhraní API platformy:
RelayCommand
,RelayCommand<T>
IRelayCommand
,IRelayCommand<T>
Jak fungují
RelayCommand
a RelayCommand<T>
mají následující hlavní funkce:
- Poskytují základní implementaci
ICommand
rozhraní. - Také implementují
IRelayCommand
(aIRelayCommand<T>
) rozhraní, které zveřejňuje metoduNotifyCanExecuteChanged
pro vyvoláníCanExecuteChanged
události. - Zpřístupňují konstruktory, kteří přebírají delegáty jako
Action
aFunc<T>
, které umožňují zabalení standardních metod a výrazů lambda.
Práce s ICommand
Následující příklad ukazuje, jak nastavit jednoduchý příkaz:
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++;
}
A relativní uživatelské rozhraní pak může být (pomocí 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>
Vazby Button
na ICommand
model viewmodel, který zabalí privátní IncrementCounter
metodu. Zobrazí TextBlock
hodnotu Counter
vlastnosti a aktualizuje se při každé změně hodnoty vlastnosti.
Příklady
- Podívejte se na ukázkovou aplikaci (pro více architektur uživatelského rozhraní) a podívejte se na sadu nástrojů MVVM v akci.
- Další příklady najdete také v testech jednotek.