在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="" Height="" Width="" HorizontalAlignment="Left" Content="Decrease"  Command="Slider.DecreaseLarge"  CommandTarget="{Binding  ElementName=slider}"/>
<Slider Grid.Row="" x:Name="slider" Width=""></Slider>
<Button Grid.Row="" Height="" Width="" 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...

WPF学习之路(六)Command的更多相关文章

  1. WPF学习之路初识

    WPF学习之路初识   WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...

  2. 【WPF学习】第六十四章 构建基本的用户控件

    创建一个简单用户控件是开始自定义控件的好方法.本章主要介绍创建一个基本的颜色拾取器.接下来分析如何将这个控件分解成功能更强大的基于模板的控件. 创建基本的颜色拾取器很容易.然而,创建自定义颜色拾取器仍 ...

  3. WPF学习之路一

    前段时间一直在学习MVC,工作需要,现在需要180度急转弯,搞WPF,MVVM,只能找资料学习了. WPF中有一个消息机制,就是当前台控件绑定的值改变时,会自动通知到指定的事件来改变VM的值,反之亦然 ...

  4. WPF学习之路(九)导航链接

    Hyperlink WPF中超链接类型是Hyperlink,除了能在页面之间导航,还能再同一个页面下进行段落导航 实例: <Grid> <FlowDocumentReader> ...

  5. WPF学习之路(一) 初识WPF

    参考<葵花宝典-WPF自学手册> VS2012 先创建第一个WPF小程序 1.创建WPF程序 2.查看Solution,WPF中xaml文件和cs文件经常成对出现 两个主要的类:APP(W ...

  6. 【WPF学习】第六十章 创建控件模板

    经过数十天的忙碌,今天终于有时间写博客. 前面一章通过介绍有关模板工作方式相关的内容,同时介绍了FrameWorkElement下所有控件的模板.接下来将介绍如何构建一个简单的自定义按钮,并在该过程中 ...

  7. WPF学习之路(十四)样式和模板

    样式 实例: <Window.Resources> <Style x:Key="BtnStyle"> <Setter Property=" ...

  8. WPF学习之路(十三)URL

    URL一般由三个部分组成,协议.资源所在主机地址.资源路径 WPF中URL同样有三部分组成:pack.authority(application:| siteoforigin:).路径 资源文件 本地 ...

  9. WPF学习之路(十二)控件(Items控件)

     ListBox 提供了一个选项列表,可以固定或者动态绑定 <StackPanel> <GroupBox Margin="> <GroupBox.Header& ...

随机推荐

  1. 使用Dom4j进行XML解析

    1  概述 在进行ESB集成项目中,使用到了很多系统的接口,这些接口传输的数据大部分都采用了XML的格式,这样在使用ESB开发服务时就需要对XML数据进行解析或拼接的操作,本文以项目中流程服务为例,讲 ...

  2. for循环的执行顺序

    一边回顾基础一边记录记录做个整理,这篇关于for循环的执行顺序: for(表达式1;表达式2;表达式3) {循环体} 第一步,先对表达式1赋初值; 第二步,判别表达式2是否满足给定条件,若其值为真,满 ...

  3. Delegate

    public delegate void EventHandler(object sender, EventArgs e); pulic EventHandler HandleMapMessage; ...

  4. 以Unix之名

    即便有了MBP,有时,还是想把MBP装上一个Linux发行版,因为习惯了Linux下的折腾. 但每次想要动手安装时,都会告诉自己,MacOS是很纯正的Unix系统,这样,内心的冲动就可以再多压一压. ...

  5. NoSQL入门概述

    入门概述 1 NoSQL是什么? NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关 ...

  6. java 小程序-- 汉诺塔

    1.code public static void main(String[] args) { ; moveDish(, 'A', 'B', 'C'); } public static void mo ...

  7. quickstart.sh

    #!/bin/bashjava_pid=`ps -ef | grep java | grep 'com.kzhong.huamu.sisyphus.QuickStartServer' | awk '{ ...

  8. JavaScript基础------入门基础

    JavaScript他是一种描述性语言,使用JavaScript就是为了能和网页有更好的交互,下面切入主题进行讲解. 一.JavaScript 1.什么是JavaScript JavaScript是一 ...

  9. INFO: task java:27465 blocked for more than 120 seconds不一定是cache太大的问题

    这几天,老有几个环境在中午收盘后者下午收盘后那一会儿,系统打不开,然后过了一会儿,进程就消失不见了,查看了下/var/log/message,有如下信息: Dec 12 11:35:38 iZ23nn ...

  10. php 相关模块备忘

    在安装php的时候,不管是编译安装: ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc -- ...