//定义接口
     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. bzoj2738

    感人肺腑pascal过不去系列,跪求开O2先不说这个了,学完cdq分治之后又顺手学了一下整体二分感觉这两个东西很多相似的地方,干脆都叫cdq分治好了二分解决k小就是设当前二分的答案为m,把x<= ...

  2. Linux下搭建BT服务器

    P2P(Peer to Peer 即对等网络)就是在这种背景下提出的一种网络技术,P2P可以简单地定义为通过直接交换信息,共享计算机资源和服务,对等计算机兼有客户机和服务器的功能.在这种网络中所有的节 ...

  3. -_-#【网站优化】AJAX

    如何让搜索引擎抓取AJAX内容? Ajax 缓存: 两个重要的事实 使用 AJAX 事件触发 AJAX 请求.不要产生多次请求. 对 AJAX 请求使用 GET 方法 Use GET for AJAX ...

  4. c程序设计语言_习题1-18_删除输入流中每一行末尾的空格和制表符,并删除完全是空格的行

    Write a program to remove all trailing blanks and tabs from each line of input, and to delete entire ...

  5. Google Chrome中的高性能网络 (三)

    使用预连接优化了TCP连接管理 已经预解析到了主机名,也有了由OmniBox和Chrome Predictor提供信号,预示着用户未来的操作.为什么再进一步连接到目标主机,在用户真正发起请求前完成TC ...

  6. servlet读取cookie问题

    String sessionid = request.getSession().getId(); // 取得当前的session id ckSessionid = new Cookie("s ...

  7. inno setup 打包

    ; -- Example1.iss -- ; Demonstrates copying files and creating an icon. ; SEE THE DOCUMENTATION FOR ...

  8. hunnu---11547 你的组合数学学得如何?

    解析:比较简单的DP,从左向右一个一个连续着放,dp[X][Y]表示到第X个硬币的时候Y状态的方案数,Y=0表示x左边那个不是正面的,Y=1表示x左边那个是正面 如果左边不是正面,那么当前放正面的就把 ...

  9. Unity给力插件之ShaderForge(三)

    地形模型材质: 使用Unity自带的地形会出现一些问题,所以我尽量使用手工制作的模型来制作地形.而地形又需要只使用一个材质球,于是在此制作一个简单的Shader. 效果图: 注意: 1.颜色遮罩的图片 ...

  10. 【原】Spark Rpc通信源码分析

    Spark 1.6+推出了以RPCEnv.RPCEndpoint.RPCEndpointRef为核心的新型架构下的RPC通信方式.其具体实现有Akka和Netty两种方式,Akka是基于Scala的A ...