无参Command:

WPF 自定义Command_WPF

WPF 自定义Command_microsoft_02

1 internal class DelegateCommand : ICommand
2 {
3 private readonly Action _execute;
4 private readonly Func<bool> _canExecute;
5
6 public DelegateCommand(Action execute) : this(execute, null) { }
7 public DelegateCommand(Action execute, Func<bool> canExecute)
8 {
9 _execute = execute ?? throw new ArgumentNullException(nameof(execute));
10 _canExecute = canExecute;
11 }
12
13 public void Execute(object parameter)
14 {
15 _execute();
16 }
17 public bool CanExecute(object parameter)
18 {
19 if (_canExecute == null) return true;
20 return _canExecute();
21 }
22
23
24 public event EventHandler CanExecuteChanged
25 {
26 add => CommandManager.RequerySuggested += value;
27 remove => CommandManager.RequerySuggested -= value;
28 }
29

View Code

有参Command:

WPF 自定义Command_WPF

WPF 自定义Command_microsoft_02

1     internal class DelegateCommand<T> : ICommand
2 {
3 private readonly Action<T> _execute;
4 private readonly Func<bool> _canExecute;
5
6 public DelegateCommand(Action<T> execute) : this(execute, null) { }
7 public DelegateCommand(Action<T> execute, Func<bool> canExecute)
8 {
9 _execute = execute ?? throw new ArgumentNullException(nameof(execute));
10 _canExecute = canExecute;
11 }
12
13 public void Execute(object parameter)
14 {
15 _execute((T)parameter);
16 }
17 public bool CanExecute(object parameter)
18 {
19 if (_canExecute == null) return true;
20 return _canExecute();
21 }
22
23
24 public event EventHandler CanExecuteChanged
25 {
26 add => CommandManager.RequerySuggested += value;
27 remove => CommandManager.RequerySuggested -= value;
28 }
29

View Code

在viewmodel中,定义一个Command属性

1 Command=new DelegateCommand<string> (searchText=>{
2   //添加逻辑
3

然后绑定即可。

1 <Window x:Class="WpfApp21.MainWindow"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6 xmlns:viewModels="clr-namespace:WpfApp21.ViewModels"
7 xmlns:local="clr-namespace:WpfApp21"
8 mc:Ignorable="d"
9 Title="MainWindow" Height="450" Width="800">
10 <Window.DataContext>
11 <viewModels:SearchWordViewModel/>
12 </Window.DataContext>
13 <StackPanel>
14 <TextBox x:Name="InputTextBox"></TextBox>
15 <Button Command="{Binding SearchCommand}" CommandParameter="{Binding ElementName=InputTextBox,Path=Text}"></Button>
16 </StackPanel>
17 </Window>

 

作者:​​唐宋元明清2188​