//定义接口
     public interface IView
     {
         bool IsChanged { get; set; }

         void SetBinding();
         void Clear();
     }

     //定义命令
     public class ClearCommand : ICommand
     {
         public event 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);
             }
         }
     }

     /// <summary>
     /// UCView.xaml 的交互逻辑
     /// </summary>
     public partial class UCView : UserControl,IView
     {
         public UCView()
         {
             InitializeComponent();
         }

         public bool IsChanged
         {
             get; set;
         }

         public void Clear()
         {
             this.textBox1.Clear();
             this.textBox2.Clear();
         }

         public void SetBinding()
         {
             throw new NotImplementedException();
         }
     }

 <Window>
     <Grid>
         <StackPanel>
             <local:MyCommandSource x:Name="srcClear">
                 <!--添加命令源 内容控件-->
                 <TextBlock Text="></TextBlock>
             </local:MyCommandSource>
             <local:UCView x:Name="ucView"></local:UCView>
         </StackPanel>
     </Grid>
 </Window>    

         private void Window_Loaded(object sender, RoutedEventArgs e)
         {
             //创建命令
             ClearCommand clearcmd = new ClearCommand();
             //命令源设置命令
             srcClear.Command = clearcmd;
             //命令源 设置 目标
             srcClear.CommandTarget = ucView;
         }

同名的命令用 参数来区分

WPF Command命令模式的更多相关文章

  1. C++设计模式-Command命令模式

    Command命令模式作用:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作. 由于“行为请求者”与“行为实现者”的紧耦合,使用命令模式 ...

  2. 设计模式14:Command 命令模式(行为型模式)

    Command 命令模式(行为型模式) 耦合与变化 耦合是软件不能抵御变化的根本性原因.不仅实体对象与实体对象之间存在耦合关系,实体对象与行为操作之间也存在耦合关系. 动机(Motivation) 在 ...

  3. 22、Command 命令模式

    1.command 命令模式 命令模式(Command Pattern):在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指 ...

  4. Command 命令模式

    简介 将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化.用于[行为请求者]与[行为实现者]解耦,可实现二者之间的松耦合,以便适应变化. 将一个请求封装为一个对象,从而使你可用不同 ...

  5. 设计模式(十四):Command命令模式 -- 行为型模式

    1.概述         在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来 ...

  6. 二十二、Command 命令模式

    原理: 时序图: 代码清单: command.Command public interface Command { void execute(); } command.MacroCommand pub ...

  7. 设计模式C++学习笔记之十二(Command命令模式)

      命令模式,将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤消的操作.应该是一个比较简单的模式了. 12.1.解释 main(),客户 CIn ...

  8. 设计模式(14)--Command(命令模式)--行为型

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.模式定义:   命令模式属于对象的行为模式.命令模式又称为行动(Action)模式或交易(Transactio ...

  9. Command 命令模式 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

随机推荐

  1. WCF - Developers Tools

    For developing a WCF service application, there are mainly two tools – Microsoft Visual Studio and C ...

  2. msdn上wcf的介绍

    https://msdn.microsoft.com/zh-cn/library/dd456779(v=vs.110).aspx Windows Communication Foundation Ar ...

  3. Mysql表的七种引擎类型,InnoDB和MyISAM引擎对比区别总结

    InnoDB和MyISAM区别总结 我用MySQL的时候用的是Navicat for MySQL(Navicat for mysql v9.0.15注册码生成器)操作库.表操作的,默认的表就是Inno ...

  4. C#线程篇---Task(任务)和线程池不得不说的秘密(5)

    在上篇最后一个例子之后,我们发现了怎么去使用线程池,调用ThreadPool的QueueUserWorkItem方法来发起一次异步的.计算限制的操作,例子很简单,不是吗? 然而,在今天这篇博客中,我们 ...

  5. 用jQuery 处理XML-- jQuery与XML

    jQuery与XML 快而强的遍历系统,华丽丽的选择器语法,这或许是jQuery 那么流行的原因.当然它还有详尽的文档.它主要是用来处理HTML的,但在这里妳会看到如何应用到XML. 使用jQuery ...

  6. 一步一步学Remoting系列文章

    转自:http://www.cnblogs.com/lovecherry/archive/2005/05/24/161437.html (原创)一步一步学Remoting之一:从简单开始(原创)一步一 ...

  7. Xfire soapHeader的WebService权限控制forjava

    研究webservice有一段时间了,觉得用soapHeader来控制访问比较简单,特贴出代码以供大家分享 1.我们可以做一个很简单的ws测试,服务端的接口代码如下: package ws; //Ge ...

  8. [POJ2484]A Funny Game

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4533   Accepted: 2780 Description Alice ...

  9. oracle to_date函数(转载)

    TO_DATE格式(以时间:2007-11-02   13:45:25为例)           Year:              yy two digits 两位年                ...

  10. SQL Server2008 程序设计 汇总 GROUP BY,WITH ROLLUP,WITH CUBE,GROUPING SETS(..)

    --SQL Server2008 程序设计 汇总 GROUP BY ,WITH ROLLUP  WITH CUBE  GROUPING SET(..) /*********************** ...