WPF中的下令模式:打造清楚、可重用的代码利器

打印 上一主题 下一主题

主题 850|帖子 850|积分 2550

 
概述:在WPF中,Command是一种良好的机制,通过它,我们能够将用户界面操作与业务逻辑分离,进步代码的可维护性和可重用性。通过自定义ICommand接口的实现(如RelayCommand),我们能够轻松创建并在XAML中绑定下令,实现清楚的MVVM架构。这种模式使得应用程序的开发更加灵活,同时进步了代码的可测试性。
在WPF(Windows Presentation Foundation)中,Command(下令)是一种用于处理用户界面元素交互的机制,它有助于将用户输入(如按钮点击、菜单选择等)与应用程序逻辑分离开来。使用下令模式,可以在MVVM(Model-View-ViewModel)架构中更好地组织代码,并且有助于实现可重用和可测试的代码。以下是关于WPF中Command的详细解说:
1. Command的作用和功能:

在WPF中,Command主要有以下几个作用和功能:

  • 解耦UI和业务逻辑: 使用Command可以将用户界面元素(如按钮)的操作与现实的业务逻辑分离,使代码更易维护和测试。
  • 可重用性: 可以在多个界面元素中共享相同的下令,从而进步代码的可重用性。
  • 支持异步操作: Command可以处理异步操作,比方在配景线程中执行某些任务而不阻塞用户界面。
  • 状态管理: 下令可以通过CanExecute方法控制是否答应执行,从而实现对下令的状态管理。
2. Command的用法:

在WPF中,可以使用ICommand接口来定义自定义下令,也可以使用RoutedCommand和RoutedUICommand类来创建路由下令。以下是使用ICommand接口的示例:
  1. using System;
  2. using System.Windows.Input;
  3. public class RelayCommand : ICommand
  4. {
  5.     private readonly Action<object> _execute;
  6.     private readonly Func<object, bool> _canExecute;
  7.     public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)
  8.     {
  9.         _execute = execute ?? throw new ArgumentNullException(nameof(execute));
  10.         _canExecute = canExecute;
  11.     }
  12.     public event EventHandler CanExecuteChanged
  13.     {
  14.         add { CommandManager.RequerySuggested += value; }
  15.         remove { CommandManager.RequerySuggested -= value; }
  16.     }
  17.     public bool CanExecute(object parameter)
  18.     {
  19.         return _canExecute == null || _canExecute(parameter);
  20.     }
  21.     public void Execute(object parameter)
  22.     {
  23.         _execute(parameter);
  24.     }
  25. }
复制代码
3. 使用Command的步骤:

步骤如下:
步骤 1:创建ViewModel并定义下令
  1. using System.Diagnostics;
  2. using System.Windows.Input;
  3. namespace Sample_WPFCommand
  4. {
  5.     public class MainViewModel
  6.     {
  7.         public ICommand MyCommand { get; }
  8.         public MainViewModel()
  9.         {
  10.             MyCommand = new RelayCommand(ExecuteMyCommand, CanExecuteMyCommand);
  11.         }
  12.         private void ExecuteMyCommand(object parameter)
  13.         {
  14.             Trace.WriteLine($"{DateTime.Now.ToString()}点击了我,我该干什么我不记得了:(");
  15.             // 处理命令执行逻辑
  16.         }
  17.         private bool CanExecuteMyCommand(object parameter)
  18.         {
  19.             // 定义命令是否可执行的逻辑
  20.             return true;
  21.         }
  22.     }
  23. }
复制代码
步骤 2:在XAML中绑定下令
  1. <Window x:
  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:local="clr-namespace:Sample_WPFCommand"
  7.         mc:Ignorable="d"
  8.         Title="MainWindow" Height="450" Width="800">
  9.     <Window.DataContext>
  10.         <local:MainViewModel />
  11.     </Window.DataContext>
  12.     <Grid>
  13.         <Grid.RowDefinitions>
  14.             <RowDefinition/>
  15.             <RowDefinition/>
  16.         </Grid.RowDefinitions>
  17.         <Button Grid.Row="0" Content="点我试试,哈哈" Command="{Binding MyCommand}" HorizontalAlignment="Center" VerticalAlignment="Center" />
  18.     </Grid>
  19. </Window>
复制代码
运行效果:
 
4. 实例源代码:

上述步骤中的源代码已经涵盖了一个简单的WPF应用程序中怎样使用Command。请根据现实需求修改ExecuteMyCommand和CanExecuteMyCommand方法中的逻辑。
链接:https://pan.baidu.com/s/1BgF2CnS6q6zDkEi7Yw6pfw?pwd=6666 
 



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

渣渣兔

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表