RelayCommand ve RelayCommand<T>

RelayCommand ve RelayCommand<T>, görünüme bir yöntem veya temsilci sunabilen ICommand uygulamalarıdır. Bu türler, viewmodel ve UI öğeleri arasında komut bağlamanın bir yolu olarak davranır.

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

Nasıl çalışırlar?

RelayCommand ve RelayCommand<T> aşağıdaki ana özelliklere sahiptir:

  • ICommand arabiriminin temel bir uygulamasını sağlarlar.
  • Ayrıca, CanExecuteChanged olayını tetiklemek için NotifyCanExecuteChanged yöntemini kullanıma sunan IRelayCommand (ve IRelayCommand<T>) arabirimini de uygularlar.
  • Action ve Func<T> gibi temsilcileri parametre olarak alan oluşturucular sunarlar; bu sayede standart yöntemler ve lambda ifadeleri sarmalanabilir.

ICommand ile çalışma

Aşağıda basit bir komutun nasıl ayarlanacağı gösterilmektedir:

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

İlgili kullanıcı arabirimi de WinUI XAML kullanılarak şu şekilde olabilir:

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

Button, özel IncrementCounter yöntemini saran görünüm modelindeki ICommand öğesine bağlanır. özelliğin TextBlockCounter değerini görüntüler ve özellik değeri her değiştiğinde güncelleştirilir.

Örnekler