博客
关于我
wpf-基础-命令-自定义命令
阅读量:660 次
发布时间:2019-03-15

本文共 2585 字,大约阅读时间需要 8 分钟。

WPF 应用程序中的命令与自定义控件实现

在 WPF 应用程序开发中,命令(Command)是实现应用程序逻辑的重要机制。通过命令,可以将 UI 元素与业务逻辑分开,使 UI 界面更加清晰可维护。然而,RoutedCommand 与业务逻辑无关,业务逻辑应依靠外围的 CommandBinding 来实现。

自定义控件与命令

1.1 自定义控件的实现

以下是一个简单的自定义控件示例,用于清除三个 TextBox 中的内容。

1.2 控件的后台逻辑

namespace pxy{    public partial class UserControl1 : UserControl, IView    {        public UserControl1()        {            InitializeComponent();        }        public bool IsChanged { get; set; }        public void Clear()        {            this.textBox1.Clear();            this.textBox2.Clear();            this.textBox3.Clear();            this.textBox4.Clear();        }        public void Refresh()        {            throw new NotImplementedException();        }        public void Save()        {            throw new NotImplementedException();        }        public void SetBinding()        {            throw new NotImplementedException();        }    }}

1.3 主窗口逻辑

public partial class MainWindow : Window{    public MainWindow()    {        InitializeComponent();        ClearCommand clearCommand = new ClearCommand();        this.ctrlClear.Command = clearCommand;        this.ctrlClear.CommandTarget = this.UserControl1;    }}public interface IView{    bool IsChanged { get; set; }    void SetBinding();    void Refresh();    void Clear();    void Save();}public class ClearCommand : ICommand{    public event System.EventHandler CanExecuteChanged;    public bool CanExecute(object parameter)    {        throw new NotImplementedException();    }    public void Execute(object parameter)    {        IView view = parameter as IView;        if (view != null)            view.Clear();    }}public class MyCommandSource : UserControl, ICommandSource{    public ICommand Command { get; set; }    public object CommandParameter { get; set; }    public IInputElement CommandTarget { get; set; }    protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)    {        base.OnMouseLeftButtonDown(e);        if (this.CommandTarget != null)            this.Command.Execute(this.CommandTarget);    }}

命令与业务逻辑的结合

在 WPF 应用程序中,命令是用来实现业务逻辑的核心机制。通过 CommandBinding 将命令与 UI 元素绑定,可以实现 UI 元素与业务逻辑的分离。自定义命令的实现需要继承 ICommand 接口,并实现 CanExecuteExecute 方法。

在本文中,ClearCommand 是一个自定义命令,用于清除三个 TextBox 中的内容。MyCommandSource 是一个自定义的命令源控件,它能够捕捉左键单击事件并执行命令。通过将 ClearCommand 绑定到 MyCommandSource,可以实现清除功能。

总结

通过以上实现,可以清晰地看到 WPF 应用程序中命令与自定义控件的结合方式。命令负责实现业务逻辑,自定义控件负责定义 UI 界面,两者通过 CommandBinding 实现了紧密的耦合。这种设计使得 UI 界面更加清晰,同时也提高了代码的可维护性和扩展性。

转载地址:http://smelz.baihongyu.com/

你可能感兴趣的文章
opencv保存图片路径包含中文乱码解决方案
查看>>
OpenCV保证输入图像为三通道
查看>>
OpenCV入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
查看>>
opencv图像分割2-GMM
查看>>
opencv图像分割3-分水岭方法
查看>>
opencv图像切割1-KMeans方法
查看>>
OpenCV图像处理篇之阈值操作函数
查看>>
opencv图像特征融合-seamlessClone
查看>>
OpenCV图像的深浅拷贝
查看>>
OpenCV在Google Colboratory中不起作用
查看>>
OpenCV学习(13) 细化算法(1)(转)
查看>>
OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
查看>>
OpenCV学堂 | CV开发者必须懂的9种距离度量方法,内含欧氏距离、切比雪夫距离等(建议收藏)
查看>>
OpenCV学堂 | OpenCV中支持的人脸检测方法整理与汇总
查看>>
OpenCV学堂 | OpenCV案例 | 基于轮廓分析对象提取
查看>>
OpenCV学堂 | YOLOv8与YOLO11自定义数据集迁移学习效果对比
查看>>
OpenCV学堂 | YOLOv8官方团队宣布YOLOv11 发布了
查看>>
OpenCV学堂 | YOLOv8实战 | 荧光显微镜细胞图像检测
查看>>
OpenCV学堂 | 汇总 | 深度学习图像去模糊技术与模型
查看>>
OpenCV安装
查看>>