WPF学习之路(六)Command
在WPF中,命令绑定机制是相比于事件更高级的概念,把应用程序的功能划分为多个任务,任务由多种途径触发。
应用Command Binding使代码更符合MVVM模式(Model-View-ViewModel),类似于MVC模式(Model-View-Control)。这两种模式在以后的BLOG中会有详细的介绍。目的都是为了更好的分离前后台逻辑。
一个简单的Button
<Button Content="Button" Click="Button_Click" />
private void Button_Click(object sender, RoutedEventArgs e) {MessageBox.Show("Hello WPF"); }
前台显示需要通过Button_Click方法跟后台关联上,如果想更好的分离这两部分,将Click事件替换成Command
自定义Command
using System; using System.Windows; using System.Windows.Input;public class MyCommand : ICommand {public bool CanExecute(object parameter){return true;}public event EventHandler CanExecuteChanged;public void Execute(object parameter){MessageBox.Show("Hello WPF");} }
<Button Content="Button" x:Name="btn1" />
public MainWindow() {InitializeComponent();btn1.Command = new MyCommand(); }
现在逻辑已经被分离到MyCommand中了
使用预定义Command
ApplicationCommands提供了很多预定义Command
<Button Content="Button" x:Name="btn2" Command="ApplicationCommands.Close"/>
但是这些命令并没有实现 ("▔□▔)
使用Command Binding添加逻辑
public MainWindow() {InitializeComponent();var OpenCmdBinding = new CommandBinding(ApplicationCommands.Close,OpenCmdExecuted,OpenCmdCanExecute);this.CommandBindings.Add(OpenCmdBinding); }void OpenCmdExecuted(object target, ExecutedRoutedEventArgs e) {this.Close(); }void OpenCmdCanExecute(object sender, CanExecuteRoutedEventArgs e) {e.CanExecute = true; }
有些控件没有Command属性
<Button Grid.Row="2" Height="100" Width="100" HorizontalAlignment="Left" Content="Decrease" Command="Slider.DecreaseLarge" CommandTarget="{Binding ElementName=slider}"/> <Slider Grid.Row="2" x:Name="slider" Width="100"></Slider> <Button Grid.Row="2" Height="100" Width="100" HorizontalAlignment="Right" Content="Increase" Command="Slider.IncreaseLarge" CommandTarget="{Binding ElementName=slider}"/>
CommandParameter可以给命令传递一个值
CommandTarget:触发的命令目标
更多的Command介绍
http://www.cnblogs.com/Curry/archive/2009/07/27/1531798.html
http://www.cnblogs.com/gaixiaojie/archive/2010/09/01/1815015.html
To be continue...
转载于:https://www.cnblogs.com/alex09/p/4434464.html
WPF学习之路(六)Command相关推荐
- c# --WPF学习之路(一)
一直都是用Winform做桌面应用程序开发,听说WPF用起来比winform开发简单,更加灵活,做出来的界面可以更加美观,所以试试看,一起学习起来~~~ 目录 1.简单认识WPF项目组成 2.XAML ...
- android学习之路(六)---- 图片加载库的优化、封装
封装Image-Loader 一.背景 universal-image-loader是一项伟大的开源项目,作者在其中运用到的软件工程解决办法让人印象深刻,在本篇文章的开篇,首先向uni ...
- WPF学习之路(五) 实例:写字板(续)
WordPad 2.0 上一期实现了一虽然建议但是功能比较全面的Wordpad程序,但是程序代码略显繁琐,这一期更新改进版. MainWindows.xaml 添加 <Window.Comman ...
- (转)写的非常好的一个WPF学习之路
写的非常好的一个博客,留下以后仔细阅读 http://www.cnblogs.com/w-wanglei/category/797845.html 转载于:https://www.cnblogs.co ...
- WPF学习之路(十一)布局
布局 Canvas 基本面板,传统布局方式,支持与设备无关的坐标定位元素 <Border BorderThickness="2" BorderBrush="Blac ...
- ios7学习之路六(隐藏状态栏 )
方法一(代码设置): 现在ios7已经更改为透明,并且不占用屏幕高度.其中隐藏及显示的方法如下: 在uiviewcontroller的子类下,调用: if ([self respondsToSelec ...
- hbase scan超时设置_HBase学习之路 (六)过滤器
点击上方蓝字 关注我们 HBase学习之路 (六)过滤器 过滤器(Filter) 基础API中的查询操作在面对大量数据的时候是非常苍白的,这里Hbase提供了高级的查询方法:Filter.Filte ...
- C/C++学习之路_六: 指针
C/C++学习之路_第六章: 指针 目录 概述 指针基础知识 指针和数组 多级指针 指针和函数 指针和字符串 指针小结 1. 概述 1. 内存 内存含义: 存储器:计算机的组成中,用来存储程序和数据, ...
- 强化学习的学习之路(四十六)2021-02-15自然梯度法实现策略上的单调提升(Monotonic Improvement with Natural gradient descent)
作为一个新手,写这个强化学习-基础知识专栏是想和大家分享一下自己学习强化学习的学习历程,希望对大家能有所帮助.这个系列后面会不断更新,希望自己在2021年能保证平均每日一更的更新速度,主要是介绍强化学 ...
最新文章
- mysql递归sql_SQL如何实现MYSQL的递归查询,SQL实现MYSQL递归
- 三招教你如何判断ERP软件是否适用
- 如何从旧提交创建新的Git分支? [重复]
- c语言如何让函数一直执行,C语言如何实现在每天某个特定时间执行某个函数?
- 黑客用python还是ruby-Python、Lua和Ruby之优劣
- 3、MySQL二进制日志(Binary Log)详解
- js树形导航栏 jquery
- SasSHRM中基于shiro的认证授权:系统微服务配置shiro
- 【转】AB实验设计思路及实验落地
- -webkit-min-device-pixel-ratio的常见值对照
- squid 简单介绍及代理说明
- AOP就是面向切面编程,我们可以从几个层面来实现AOP。 ![](https://upload-im
- 奇怪,有的Python函数或方法调用需要两对括号?
- 详解Python中的生成器表达式(generator expression)
- [参考]查看ORACLE DB信息的一些SQL
- 在信号处理函数中调用longjmp
- atitit. java跟php的比较..为什么大企业喜欢java 而不是php
- 基础的重要性(程序员之路)
- unfinished application
- .Net Core 阿里云短信服务Demo