如何自己实现RelayCommand类
时间: 2024-02-02 14:05:11 浏览: 112
以下是一个简单的RelayCommand实现,您可以在WPF MVVM模式中使用它来绑定按钮事件:
```csharp
public class RelayCommand : ICommand
{
private readonly Action _execute;
private readonly Func<bool> _canExecute;
public RelayCommand(Action execute, Func<bool> canExecute = null)
{
_execute = execute ?? throw new ArgumentNullException(nameof(execute));
_canExecute = canExecute;
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public bool CanExecute(object parameter) => _canExecute?.Invoke() ?? true;
public void Execute(object parameter) => _execute();
public void RaiseCanExecuteChanged() => CommandManager.InvalidateRequerySuggested();
}
```
在上面的代码中,RelayCommand类实现了ICommand接口,包括CanExecuteChanged、CanExecute和Execute方法。其中CanExecuteChanged用于通知UI更新按钮状态,CanExecute返回一个bool值,用于判断按钮是否可用,Execute用于执行按钮的操作。
使用RelayCommand时,需要在ViewModel中声明一个RelayCommand类型的属性,并在构造函数中实例化该属性,例如:
```csharp
public class MainViewModel : ViewModelBase
{
public RelayCommand SelectImageCommand { get; set; }
public MainViewModel()
{
SelectImageCommand = new RelayCommand(SelectImage);
}
private void SelectImage()
{
// 添加选择图像的代码
}
}
```
然后在XAML中绑定该属性,例如:
```xml
<Button Content="选择图像" Command="{Binding SelectImageCommand}" />
```
通过以上步骤,您可以在WPF MVVM模式中使用自己实现的RelayCommand来绑定按钮事件。
阅读全文