WPF MvvmLight RelayCommand 绑定Command 的使用
时间: 2024-02-02 11:04:39 浏览: 162
在 WPF 应用程序中,使用 MVVM 模式时,常用的命令绑定方式是通过 RelayCommand,它是一个实现了 ICommand 接口的类,可以将其绑定到视图模型中的命令属性上。
下面是 RelayCommand 的使用示例:
首先,定义一个 RelayCommand 类:
```csharp
public class RelayCommand : ICommand
{
private readonly Action _execute;
private readonly Func<bool> _canExecute;
public RelayCommand(Action execute)
: this(execute, null)
{
}
public RelayCommand(Action execute, Func<bool> canExecute)
{
_execute = execute ?? throw new ArgumentNullException(nameof(execute));
_canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return _canExecute == null || _canExecute();
}
public void Execute(object parameter)
{
_execute();
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
}
```
这里的 RelayCommand 类有两个构造函数,第一个只接受一个 Action 类型的参数,用来执行命令;第二个构造函数接受一个 Func<bool> 类型的参数,用来判断命令是否可执行。在 CanExecute 方法中,如果 _canExecute 不为 null,就会调用它来判断命令是否可执行。
接下来,在视图模型中定义一个 RelayCommand 类型的属性,并在需要执行命令的方法中调用它:
```csharp
public class MainViewModel : ViewModelBase
{
private readonly IDataService _dataService;
public MainViewModel(IDataService dataService)
{
_dataService = dataService;
LoadDataCommand = new RelayCommand(LoadData);
}
public ICommand LoadDataCommand { get; private set; }
private void LoadData()
{
// 加载数据
}
}
```
最后,在 XAML 中绑定命令:
```xml
<Button Content="Load Data" Command="{Binding LoadDataCommand}" />
```
这里的 Command 属性绑定到视图模型的 LoadDataCommand 属性上,当按钮被点击时,就会执行 LoadData 方法。
阅读全文