• WPF 自定义Command


    无参Command:

     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:

     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>
  • 相关阅读:
    nodejs中的全局函数setTimeout/clearTimeout,setInterval/clearInterval,unref/ref
    nodejs的核心对象console
    创建一个服务器,解析当前的url并根据url并作出相应的响应
    nodejs创建服务并加载一个html文件
    nodejs读文件
    Get和Post的区别
    ui-grid 网格布局--jQueryMobile
    web开发常见问题
    全选和全不选
    微信小程序-调用工具js文件/utils文件中的函数/变量
  • 原文地址:https://www.cnblogs.com/kybs0/p/7523654.html
Copyright © 2020-2023  润新知