//定义接口
     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. Android开发UI之去掉title bar

    去掉屏幕上的title bar有3个方法: 1.java代码实现: @Override publicvoid onCreate(Bundle savedInstanceState) { super.o ...

  2. NOI 2014 感想

    NOI2014结束了,我卡线登上了领奖台... 这是我第一次NOI,我觉得我收获了很多东西: 1.考前心态不重要,重要的是实力 真正考试的时候是顾不得想其他事情的 2.测试数据是人出的!不是随机的!不 ...

  3. jquery封装的选项卡

    ul,li,div{ margin:; padding:;} ul,li{ list-style:none;} .tab_wrap{ width:450px; margin: auto 50px; o ...

  4. Google Chrome中的高性能网络(二)

    Chrome Predictor的预测功能优化 Chrome会随着使用变得更快. 它这个特性是通过一个单例对象Predictor来实现的.这个对象在浏览器内核进程(Browser Kernel Pro ...

  5. [转]优化数据库大幅度提高Oracle的性能

    几个简单的步骤大幅提高Oracle性能--我优化数据库的三板斧. 数据库优化的讨论可以说是一个永恒的主题.资深的Oracle优化人员通常会要求提出性能问题的人对数据库做一个statspack,贴出数据 ...

  6. fcitx中文输入法

    Ubuntu自带的输入法不太尽如人意思,用起来也不方便,我在Ubuntu和FC中都是用Fcitx,很好用! 安装配置如下: 1. 安装 fcitx sudo apt-get install fcitx ...

  7. Mathtype(对齐设置)

    选左对齐 可以编辑->插入符号->空格符

  8. Class.forName()数据库驱动

    在学习jdbc中,用到Class.forName(驱动);,当时学习的时候知道Class.forName就是加载一个类到虚拟机,在加载一个类的时候,这个类的信息会被放到一个方法区,一个CLass 在J ...

  9. codeforce 621C Wet Shark and Flowers

    题意:输入个n和质数p,n个区间,每个区间可以等概率的任选一个数,如果选的这个区间和它下个区间选的数的积是p的倍数的话(n的下个是1),就挣2000,问挣的期望 思路:整体的期望可以分成每对之间的期望 ...

  10. HW2.1

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...