在WPF中,命令绑定机制是相比于事件更高级的概念,把应用程序的功能划分为多个任务,任务由多种途径触发。

应用Command Binding使代码更符合MVVM模式(Model-View-ViewModel),类似于MVC模式(Model-View-Control)。这两种模式在以后的BLOG中会有详细的介绍。目的都是为了更好的分离前后台逻辑。

一个简单的Button

<Button Content="Button" Click="Button_Click" />

private void Button_Click(object sender, RoutedEventArgs e)
{MessageBox.Show("Hello WPF");
}

前台显示需要通过Button_Click方法跟后台关联上,如果想更好的分离这两部分,将Click事件替换成Command

自定义Command

using System;
using System.Windows;
using System.Windows.Input;public class MyCommand : ICommand
{public bool CanExecute(object parameter){return true;}public event EventHandler CanExecuteChanged;public void Execute(object parameter){MessageBox.Show("Hello WPF");}
}

<Button Content="Button" x:Name="btn1" />

public MainWindow()
{InitializeComponent();btn1.Command = new MyCommand();
}

现在逻辑已经被分离到MyCommand中了

使用预定义Command

ApplicationCommands提供了很多预定义Command

<Button Content="Button" x:Name="btn2" Command="ApplicationCommands.Close"/>

但是这些命令并没有实现 ("▔□▔)

使用Command Binding添加逻辑

public MainWindow()
{InitializeComponent();var OpenCmdBinding = new CommandBinding(ApplicationCommands.Close,OpenCmdExecuted,OpenCmdCanExecute);this.CommandBindings.Add(OpenCmdBinding);
}void OpenCmdExecuted(object target, ExecutedRoutedEventArgs e)
{this.Close();
}void OpenCmdCanExecute(object sender, CanExecuteRoutedEventArgs e)
{e.CanExecute = true;
}

有些控件没有Command属性

<Button Grid.Row="2" Height="100" Width="100" HorizontalAlignment="Left" Content="Decrease"  Command="Slider.DecreaseLarge"  CommandTarget="{Binding  ElementName=slider}"/>
<Slider Grid.Row="2" x:Name="slider"  Width="100"></Slider>
<Button Grid.Row="2" Height="100" Width="100" HorizontalAlignment="Right" Content="Increase"  Command="Slider.IncreaseLarge"  CommandTarget="{Binding  ElementName=slider}"/>

CommandParameter可以给命令传递一个值

CommandTarget:触发的命令目标

更多的Command介绍

http://www.cnblogs.com/Curry/archive/2009/07/27/1531798.html

http://www.cnblogs.com/gaixiaojie/archive/2010/09/01/1815015.html

To be continue...

转载于:https://www.cnblogs.com/alex09/p/4434464.html

WPF学习之路(六)Command相关推荐

  1. c# --WPF学习之路(一)

    一直都是用Winform做桌面应用程序开发,听说WPF用起来比winform开发简单,更加灵活,做出来的界面可以更加美观,所以试试看,一起学习起来~~~ 目录 1.简单认识WPF项目组成 2.XAML ...

  2. android学习之路(六)---- 图片加载库的优化、封装

    封装Image-Loader 一.背景         universal-image-loader是一项伟大的开源项目,作者在其中运用到的软件工程解决办法让人印象深刻,在本篇文章的开篇,首先向uni ...

  3. WPF学习之路(五) 实例:写字板(续)

    WordPad 2.0 上一期实现了一虽然建议但是功能比较全面的Wordpad程序,但是程序代码略显繁琐,这一期更新改进版. MainWindows.xaml 添加 <Window.Comman ...

  4. (转)写的非常好的一个WPF学习之路

    写的非常好的一个博客,留下以后仔细阅读 http://www.cnblogs.com/w-wanglei/category/797845.html 转载于:https://www.cnblogs.co ...

  5. WPF学习之路(十一)布局

    布局 Canvas 基本面板,传统布局方式,支持与设备无关的坐标定位元素 <Border BorderThickness="2" BorderBrush="Blac ...

  6. ios7学习之路六(隐藏状态栏 )

    方法一(代码设置): 现在ios7已经更改为透明,并且不占用屏幕高度.其中隐藏及显示的方法如下: 在uiviewcontroller的子类下,调用: if ([self respondsToSelec ...

  7. hbase scan超时设置_HBase学习之路 (六)过滤器

    点击上方蓝字  关注我们 HBase学习之路 (六)过滤器 过滤器(Filter) 基础API中的查询操作在面对大量数据的时候是非常苍白的,这里Hbase提供了高级的查询方法:Filter.Filte ...

  8. C/C++学习之路_六: 指针

    C/C++学习之路_第六章: 指针 目录 概述 指针基础知识 指针和数组 多级指针 指针和函数 指针和字符串 指针小结 1. 概述 1. 内存 内存含义: 存储器:计算机的组成中,用来存储程序和数据, ...

  9. 强化学习的学习之路(四十六)2021-02-15自然梯度法实现策略上的单调提升(Monotonic Improvement with Natural gradient descent)

    作为一个新手,写这个强化学习-基础知识专栏是想和大家分享一下自己学习强化学习的学习历程,希望对大家能有所帮助.这个系列后面会不断更新,希望自己在2021年能保证平均每日一更的更新速度,主要是介绍强化学 ...

最新文章

  1. mysql递归sql_SQL如何实现MYSQL的递归查询,SQL实现MYSQL递归
  2. 三招教你如何判断ERP软件是否适用
  3. 如何从旧提交创建新的Git分支? [重复]
  4. c语言如何让函数一直执行,C语言如何实现在每天某个特定时间执行某个函数?
  5. 黑客用python还是ruby-Python、Lua和Ruby之优劣
  6. 3、MySQL二进制日志(Binary Log)详解
  7. js树形导航栏 jquery
  8. SasSHRM中基于shiro的认证授权:系统微服务配置shiro
  9. 【转】AB实验设计思路及实验落地
  10. -webkit-min-device-pixel-ratio的常见值对照
  11. squid 简单介绍及代理说明
  12. AOP就是面向切面编程,我们可以从几个层面来实现AOP。 ![](https://upload-im
  13. 奇怪,有的Python函数或方法调用需要两对括号?
  14. 详解Python中的生成器表达式(generator expression)
  15. [参考]查看ORACLE DB信息的一些SQL
  16. 在信号处理函数中调用longjmp
  17. atitit. java跟php的比较..为什么大企业喜欢java 而不是php
  18. 基础的重要性(程序员之路)
  19. unfinished application
  20. .Net Core 阿里云短信服务Demo

热门文章

  1. 盘点中国互联网行业10年2万多起投融资,17年投融资形势走向何处
  2. Oracle安装——虚拟机搭建图解
  3. 关于iPhone 中sqlite文件的使用
  4. lwuit ---一些细节疑难杂症整理笔记
  5. CCIE试验备考之交换security(2)
  6. linux shell 时间运算以及时间差计算方法
  7. ORACLE PERFORMANCE TUNING 原厂培训.笔记1
  8. jeesite3环境部署时初始化数据库注意问题
  9. Android开发常用轮子
  10. JavaScript常见面试题和答案