RelayCommand dan RelayCommand<T>

RelayCommand dan RelayCommand<T> adalah ICommand implementasi yang dapat mengekspos metode atau mendelegasikan ke tampilan. Jenis ini bertindak sebagai cara untuk mengikat perintah antara elemen viewmodel dan UI.

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

Cara kerjanya

RelayCommand dan RelayCommand<T> memiliki fitur utama berikut:

  • Mereka menyediakan implementasi ICommand dasar antarmuka.
  • Mereka juga mengimplementasikan IRelayCommand antarmuka (dan IRelayCommand<T>) , yang mengekspos NotifyCanExecuteChanged metode untuk meningkatkan CanExecuteChanged peristiwa.
  • Mereka mengekspos konstruktor mengambil delegasi seperti Action dan Func<T>, yang memungkinkan pembungkusan metode standar dan ekspresi lambda.

Bekerja dengan ICommand

Berikut ini memperlihatkan cara menyiapkan perintah sederhana:

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++;
}

Dan antarmuka pengguna relatif kemudian bisa (menggunakan 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>

Pengikatan Button ke ICommand dalam viewmodel, yang membungkus metode privat IncrementCounter . menampilkan TextBlock nilai properti dan diperbarui Counter setiap kali nilai properti berubah.

Contoh