RelayCommand és RelayCommand<T>

A RelayCommand és a RelayCommand<T> olyan ICommand-implementációk, amelyek egy metódust vagy delegáltat tehetnek elérhetővé a nézet számára. Ezek a típusok a nézetmodell és a felhasználói felület elemei közötti parancsok kötésére szolgálnak.

Platform API-k:RelayCommand, RelayCommand<T>, IRelayCommand, IRelayCommand<T>

Hogyan működnek?

RelayCommand és RelayCommand<T> a következő fő funkciókkal rendelkezik:

  • Ezek a ICommand interfész alapmegvalósítását nyújtják.
  • Emellett implementálják a IRelayCommand (és IRelayCommand<T>) felületet is, amely egy metódust NotifyCanExecuteChanged tesz elérhetővé az CanExecuteChanged esemény létrehozásához.
  • Olyan konstruktorokat tesznek elérhetővé, amelyek olyan delegáltakat használnak, mint Action és Func<T>amelyek lehetővé teszik a szabványos metódusok és lambdakifejezések burkolását.

Munka a következővel: ICommand

Az alábbiakban egy egyszerű parancs beállítását mutatjuk be:

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 relatív felhasználói felület pedig lehet (WinUI XAML használatával):

<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>

A Button a viewmodellben lévő ICommand elemhez van kötve, amely becsomagolja a privát IncrementCounter metódust. A TextBlock tulajdonság értékét Counter jeleníti meg, és minden alkalommal frissül, amikor a tulajdonság értéke megváltozik.

Examples

  • Tekintse meg a mintaalkalmazást (több felhasználói felületi keretrendszer esetén) az MVVM-eszközkészlet működés közbeni megtekintéséhez.
  • Az egységtesztekben további példákat is találhat.