RelayCommand と RelayCommand<T>
RelayCommand
と RelayCommand<T>
は、メソッドまたはデリゲートをビューに公開できる ICommand
の実装です。 これらの型は、ビューモデル要素と UI 要素の間でコマンドをバインドする方法として機能します。
Platform API:
RelayCommand
、RelayCommand<T>
、IRelayCommand
、IRelayCommand<T>
そのしくみ
RelayCommand
と RelayCommand<T>
の主な機能は以下のとおりです。
- これらは
ICommand
インターフェイスのベースとなる実装を提供します。 - また、
CanExecuteChanged
イベントを発生させるNotifyCanExecuteChanged
メソッドを公開するIRelayCommand
(およびIRelayCommand<T>
) インターフェイスも実装します。 - これらは、
Action
やFunc<T>
のようなデリゲートを受け取るコンストラクターを公開し、これにより、標準メソッドとラムダ式のラップが可能になります。
ICommand
の操作
単純なコマンドを設定する方法を以下に示します。
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++;
}
この場合、相対 UI は次のようになります (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>
Button
はビューモデル内の ICommand
にバインドされ、これはプライベートの IncrementCounter
メソッドをラップします。 TextBlock
は Counter
プロパティの値を表示し、プロパティ値が変更されるたびに更新されます。
例
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
MVVM Toolkit