zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    WEB测试方法(二)
    WEB测试方法(一)
    JSP技术(六)
    JSP技术(七)
    JSP技术(四)
    JSP技术(三)
    JSP技术(五)
    JavaScript语言和jQuery技术(四)
    单元测试的四个阶段
    什么是集成测试
  • 原文地址:https://www.cnblogs.com/kybs0/p/7523654.html
Copyright © 2011-2022 走看看