在Silverlight中的MVVM模式下将前台页面和ViewModel界面交互分离开是通过本节所要讲述的Command实现的。我们自定义一个Command需要继承于ICommand接口并且实现这个接口。它有CanExecute()、Execute()方法和CanExecuteChanged事件组成。

      CanExecute():判断是否继续执行操作。

      Execute():执行操作的内容。

      CanExecuteChanged:当出现影响是否应执行该命令的更改时发生。

    首先:自定义的一个btnCommand。

    public class btnCommand:ICommand
    {
private bool canExe;
/// <summary>
/// 构造函数设置是否执行操作
/// </summary>
/// <param name="canexe"></param>
        public btnCommand(bool canexe)
        {
this.canExe = canexe;
        }

/// <summary>
/// 判断是否执行操作
/// </summary>
/// <param name="parameter"></param>
/// <returns></returns>
        public bool CanExecute(object parameter)
        {
if (canExe)
            {
return true;
            }
return false;
        }

/// <summary>
/// 是否执行操作的变更发生时
/// </summary>
        public event EventHandler CanExecuteChanged;

/// <summary>
/// 执行操作的内容,可以变为Action行为
/// </summary>
/// <param name="parameter"></param>
        public void Execute(object parameter)
        {
if (parameter != null)
            { MessageBox.Show(parameter.ToString()); }
else
            {
                MessageBox.Show("未设置CommandParameter");
            }
        }
    }

    其次:定义一个ViewModel,并且在构造函数中初始化两个Command属性。

    public class BtnViewModel
    {
// 设置两个命令
        public ICommand BtnCommand { get; set; }
public ICommand BtnCommandTrue { get; set; }
public BtnViewModel()
        {
//初始化两个命令值
            BtnCommand = new btnCommand(false);
            BtnCommandTrue = new btnCommand(true);
        }
    }

    再次将ViewModel初始化为页面数据源

    <UserControl.DataContext>
        <local:BtnViewModel />
    </UserControl.DataContext>

    最后:前台的两个按钮绑定Command

    <Grid x:Name="LayoutRoot" Background="White">
        <Button Content="第一个" Height="23" HorizontalAlignment="Left"
                Command="{Binding BtnCommand}" CommandParameter="第一个Command"
                Margin="94,80,0,0" Name="button1" VerticalAlignment="Top" Width="75" />
        <Button Command="{Binding BtnCommandTrue}" CommandParameter="第二个Command"
                Content="第二个" Height="23" HorizontalAlignment="Left" Margin="94,140,0,0"
                Name="button2" VerticalAlignment="Top" Width="75" />
    </Grid>

    如需源码请点击 SLICommand.zip 下载,下面是效果图。有一个按钮CanExecute,有一个不能点击。

转载于:https://blog.51cto.com/chengxingliang/835766

Silverlight实用窍门系列:63.Silverlight中的Command,自定义简单Command相关推荐

  1. Silverlight实用窍门系列:59.多个中心点联动多线的可拖动控件扩展为拓扑图

    在本系列的第17篇文章中"Silverlight实用窍门系列:17.中心点联动多线的可拖动控件(绘制工程图.拓扑图基础) ",制作了基本的中心联动图标.有园友对此图的扩展不是很清晰 ...

  2. Silverlight实用窍门系列:71.Silverlight的Style

    此文章实例基于Silverlight实用窍门系列:68.Silverlight的资源字典ResourceDictionary,如有数据源疑问请参考该文章. 在Silverlight中的Style相当于 ...

  3. Silverlight实用窍门大集合+Silverlight 5 最全新特性【目录索引】

    在最近的几个月内整理出了Silverlight的一些相关的比较实用的功能讲解文章,并且随着Silverlight 5 beta版本的发布整理出的新特性系列文章,在这里做一个总的概括和索引,以方便大家观 ...

  4. Silverlight实用窍门系列:40.Silverlight中捕捉视频,截图保存到本地

    在Silverlight中我们可以捕捉视频设备以制作视频会议系统,或者通过视频设备截图功能上传头像等功能. 下面我们通过一个简单的实例来访问视频设备,并且截取图像下载该截图文件至本地. 一.在Silv ...

  5. Silverlight实用窍门系列:61.Silverlight中的Trigger触发器,自定义翻页触发器

    在Silverlight应用程序和客户进行交互工作的时候可以不用写后台代码而通过Xaml代码来实现,在本文我们将学习了解Trigger触发器. Trigger触发器:引发动作的因素,比如鼠标点击.键盘 ...

  6. Silverlight实用窍门系列:47.Silverlight中元素到元素的绑定,以及ObservableCollection和List的使用区别...

    问题一:在某一些情况下,我们使用MVVM模式的时候,对于某一个字段(AgeField)需要在前台的很多个控件(A.B.C.D.E)进行绑定,但是如何能够让我们后台字段名改变的时候能够非常方便的改变所有 ...

  7. Silverlight实用窍门系列:54.详解Silverlight中的矩阵变换MatrixTransform,实现其余各种变换【附带实例源码】...

    在Silverlight中的MatrixTransform矩阵变换相对上篇文章所述的变换较复杂一些,但这种变换也更灵活. MatrixTransform的实质:让需要变换的元素上的每一个像素点*矩阵得 ...

  8. Silverlight实用窍门系列:40.Silverlight中捕捉视频,截图保存到本地【附带实例源码】...

    在Silverlight中我们可以捕捉视频设备以制作视频会议系统,或者通过视频设备截图功能上传头像等功能. 下面我们通过一个简单的实例来访问视频设备,并且截取图像下载该截图文件至本地. 一.在Silv ...

  9. Silverlight实用窍门系列:56.Silverlight中的Binding使用(一)【附带实例源码】

    本文将详细讲述Silverlight中Binding,包括Binding的属性和用法,Binding的数据流向. Binding:一个完整的Binding过程是让源对象中的某个属性值通过一定流向规则进 ...

最新文章

  1. 北科大计算机小学期,北京科技大学小学期计算机实践(C++源代码)
  2. React React-Redux的安装,使用
  3. slf4j 和 log4j合用的(Maven)配置
  4. php 安全处理,php ddos 安全处理代码
  5. C++ 租房管理系统
  6. matlab图例双字体设置
  7. php环境安装Java_常用PHP运行环境一键安装包推荐
  8. 无法定位程序输入点K32Get Module File Name Ex于动态链接库KERNEL32.dll上 的错误解析
  9. 人工智能的语义学基础
  10. 【word】删除页眉横线
  11. 笔记本键盘进水失灵,禁用方法
  12. java工程名前有红色感叹号
  13. 长期听耳机有什么坏处?哪种类型的耳机对耳朵危害小?
  14. 基于 Sphinx 以纯文本编写富媒体项目文档的方法介绍
  15. hmm 流程图_算法:HMM模型+维特比算法详解
  16. java 分转元_java元转分分转元
  17. Ubuntu 安装MinGW32出现Unable to locate package mingw32找不到安装包的解决方法和思路
  18. Sharding JDBC-读写分离
  19. 个人开发者越来越难之-----上传应用市场的软著虐我遍体鳞伤
  20. 记录一次使用Redis中ZSet和List分页

热门文章

  1. 推荐算法---FM,协同过滤
  2. 什么是TTL电平、CMOS电平、RS232电平
  3. Android onActivityResult中requestCode与resultCode区别
  4. OpenCL 第8课:旋转变换(2)
  5. 子网/子网掩码原理简介
  6. Node.js 多版本安装配置(Window、Ubuntu 、CentOS 、Mac OS、Cloud Studio)
  7. Docker:集装箱式“运输”在软件上的实现
  8. Dynamics CRM On-Premise V9安装手记
  9. sqlmap的二次开发
  10. Windows - Windows下安装MSI程序遇到2503和2502错误