RelayCommand 和 RelayCommand<T>
RelayCommand
和 RelayCommand<T>
是 ICommand
实现,这些实现可向视图公开方法或委托。 这些类型充当在 viewmodel 和 UI 元素之间绑定命令的方法。
平台 API:
RelayCommand
、RelayCommand<T>
、IRelayCommand
、IRelayCommand<T>
工作原理
RelayCommand
和 RelayCommand<T>
具有以下主要功能:
- 它们提供
ICommand
接口的基本实现。 - 它们还实现
IRelayCommand
(和IRelayCommand<T>
)接口,该接口公开NotifyCanExecuteChanged
方法以引发CanExecuteChanged
事件。 - 它们公开采用委托(如
Action
和Func<T>
)的构造函数,从而允许包装标准方法和 Lambda 表达式。
使用 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
绑定到 viewmodel 中的 ICommand
,它包装专用 IncrementCounter
方法。 TextBlock
显示 Counter
属性的值,并在每次属性值更改时更新。