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

简介:

    在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,有一个不能点击。


本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/835766



相关文章
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
本地部署QWQ显存不够怎么办?
3月6日阿里云发布并开源了全新推理模型通义千问 QwQ-32B,在一系列权威基准测试中,千问QwQ-32B模型表现异常出色,几乎完全超越了OpenAI-o1-mini,性能比肩Deepseek-R1,且部署成本大幅降低。并集成了与智能体 Agent 相关的能力,够在使用工具的同时进行批判性思考,并根据环境反馈调整推理过程。阿里云人工智能平台 PAI-Model Gallery 现已经支持一键部署 QwQ-32B,本实践带您部署体验专属 QwQ-32B模型服务。
|
自然语言处理 算法 BI
Baum-Welch算法
Baum-Welch算法
|
消息中间件 数据库
如何保证 RabbitMQ 消费者端在更新数据库时可以成功
如何保证 RabbitMQ 消费者端在更新数据库时可以成功
409 0
|
消息中间件 存储 Apache
RocketMQ实战教程之常见概念和模型
Apache RocketMQ 实战教程介绍了其核心概念和模型。消息是基本的数据传输单元,主题是消息的分类容器,支持字节、数字和短划线命名,最长64个字符。消息类型包括普通、顺序、事务和定时/延时消息。消息队列是实际存储和传输消息的容器,是主题的分区。消费者分组是一组行为一致的消费者的逻辑集合,也有命名限制。此外,文档还提到了一些使用约束和建议,如主题和消费者组名的命名规则,消息大小限制,请求超时时间等。RocketMQ 提供了多种消息模型,包括发布/订阅模型,有助于理解和优化消息处理。
|
安全 Python
【Python】@property用法简述
【Python】@property用法简述
355 0
|
Unix Linux Windows
获取网站绝对路径常用方法
获取网站绝对路径常用方法
564 1
|
Java 程序员 API
【深入探究 Qt 线程】一文详细解析Qt线程的内部原理与实现策略
【深入探究 Qt 线程】一文详细解析Qt线程的内部原理与实现策略
1184 0
|
C# 开发者
35.c#:winform窗口
35.c#:winform窗口
159 1
|
API PHP 数据库
构建个人图床云盘—EasyImage的简单部署及远程访问配置
构建个人图床云盘—EasyImage的简单部署及远程访问配置
|
存储
leetcode:225. 用队列实现栈
leetcode:225. 用队列实现栈
99 0