当前位置:   article > 正文

WPF Command

WPF Command

WPF COMMAND在Windows Presentation Foundation(WPF)框架中是一个设计模式,主要用于实现用户界面(UI)元素和业务逻辑之间的松耦合交互。具体来说,它是MVVM(Model-View-ViewModel)架构中的重要组成部分。

在WPF中,Command是一种行为,允许UI控件(如按钮)的Command属性绑定到一个命令对象,而不是直接绑定到一个方法调用。当用户触发UI事件时(例如点击按钮),相应的命令会被执行,并且该命令可以关联到任何实现了 ICommand 接口的对象,这个对象定义了何时命令可执行以及执行命令时应进行的操作。

通过这种方式,开发者可以在ViewModel层中定义命令并处理业务逻辑,然后在View层中仅声明要绑定的命令,从而极大地增强了代码的可维护性和可测试性。

在WPF应用中,可以通过数据绑定将ICommand实例与UI控件(如Button)的Command属性关联起来控件的Command属性绑定的主要是方法,这样在用户与UI交互时,就能够自动调用对应的命令执行逻辑,而无需直接在控件的事件处理器中写入复杂的业务代码。

不管是ICommand还是INotifyPropertyChanged 都必须首先将ViewMode的实例设置为控件或整个界面的 DataContext如,this.DataContext = new MainViewModel();DataContext是UI层与数据逻辑层的桥梁。

ICommand 接口中定义了两个方法和一个属性

  1. Execute 方法:当命令被调用时执行的方法,通常在这里编写处理实际业务逻辑的代码。

    void Execute(object parameter);
  2. CanExecute 方法:判断命令当前是否可以被执行。这个方法返回一个布尔值,视图会根据这个值决定是否使能关联的UI控件。

    bool CanExecute(object parameter);
  3. CanExecuteChanged 事件:当命令的可执行状态改变时触发此事件,视图接收到此事件后会重新检查并更新相关UI控件的状态。

    event EventHandler CanExecuteChanged;

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows;
  7. namespace WpfApplication1
  8. {
  9. public class MainViewModel
  10. {
  11. public MainViewModel()
  12. {
  13. ShowMyCommand = new MyCommand(show);
  14. }
  15. public MyCommand ShowMyCommand
  16. {
  17. set;get;
  18. }
  19. public void show()
  20. {
  21. MessageBox.Show("按钮2被点击了");
  22. }
  23. }
  24. }
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Data;
  9. using System.Windows.Documents;
  10. using System.Windows.Input;
  11. using System.Windows.Media;
  12. using System.Windows.Media.Imaging;
  13. using System.Windows.Navigation;
  14. using System.Windows.Shapes;
  15. namespace WpfApplication1
  16. {
  17. /// <summary>
  18. /// MainWindow.xaml 的交互逻辑
  19. /// </summary>
  20. public partial class MainWindow : Window
  21. {
  22. public MainWindow()
  23. {
  24. InitializeComponent();
  25. this.DataContext = new MainViewModel();//MainViewModel作为数据源为MainWindow提供上下文
  26. }
  27. private void Button_Click(object sender, RoutedEventArgs e)
  28. {
  29. MessageBox.Show("按钮被点击了");
  30. }
  31. }
  32. }
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows.Input;
  7. namespace WpfApplication1
  8. {
  9. public class MyCommand : ICommand
  10. {
  11. public Action ExecuteAction;
  12. public MyCommand(Action act)
  13. {
  14. ExecuteAction += act;
  15. }
  16. public event EventHandler CanExecuteChanged;
  17. public bool CanExecute(object parameter)
  18. {
  19. return true;
  20. }
  21. public void Execute(object parameter)
  22. {
  23. ExecuteAction();
  24. }
  25. }
  26. }
  1. <Window x:Class="WpfApplication1.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:local="clr-namespace:WpfApplication1"
  7. mc:Ignorable="d"
  8. Title="MainWindow" Height="350" Width="525">
  9. <Grid>
  10. <StackPanel>
  11. <Button Content="按钮" Click="Button_Click"/> <!--以事件方式触发-->
  12. <Button Content="按钮2" Name="btnCommand" Command="{Binding ShowMyCommand}"/><!--已绑定方式实现-->
  13. </StackPanel>
  14. </Grid>
  15. </Window>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/257996
推荐阅读
相关标签
  

闽ICP备14008679号