Sdílet prostřednictvím


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 (a IRelayCommand<T>) rozhraní, které zveřejňuje metodu NotifyCanExecuteChanged pro vyvolání CanExecuteChanged události.
  • Zpřístupňují konstruktory, kteří přebírají delegáty jako Action a Func<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.