WPF绑定命令
一、目的
降低代码耦合度(降低UI层和BLL层的代码耦合度),将UI层的后台代码更好的转移到BLL层中,让视图和业务逻辑分离的更好
二、使用方式
1.创建一个RelayCommand,继承ICommand接口
public class RelayCommand : ICommand
{
#region Fields
private readonly Func<Object, Boolean> _canExecute;
private readonly Action<Object> _execute;
#endregion #region Constructors
public RelayCommand(Action<Object> execute) : this(execute, null)
{
} public RelayCommand(Action<Object> execute, Func<Object, Boolean> canExecute)
{
if (execute == null)
throw new ArgumentNullException("execute"); _execute = execute;
_canExecute = canExecute;
}
#endregion #region ICommand Members
public event EventHandler CanExecuteChanged
{
add
{
if (_canExecute != null)
CommandManager.RequerySuggested += value;
}
remove
{
if (_canExecute != null)
CommandManager.RequerySuggested -= value;
}
} public Boolean CanExecute(Object parameter)
{
return _canExecute == null ? true : _canExecute(parameter);
} public void Execute(Object parameter)
{
_execute(parameter);
}
#endregion
}
2.创建一个ViewModel类,创建RelayCommand属性对象
(1)使用lambda表达式
public class ViewModelTest
{
public ICommand ShowMessage
{
get
{
return new RelayCommand(new Action<Object>(t =>
{
if (t == null)
MessageBox.Show("not have param");
else
MessageBox.Show(t.ToString());
}));
}
}
}
(2)使用函数
public class ViewModelTest
{ private void UpdateNameExecute(Object parameter)
{
MessageBox.Show("haha");
} private bool CanUpdateNameExecute(Object parameter)
{
return true;
} public ICommand ShowMessage
{
get
{
return new RelayCommand(UpdateNameExecute, CanUpdateNameExecute);
}
}
}
3.界面后台类,将ViewModel对象赋给内容上下文
DataContext = new ViewModelTest();
4.界面绑定命名
(1)不带参数
<Button Width="" Height="" Command="{Binding ShowMessage}"/>
(2)带参数
<Button Width="" Height="" Command="{Binding ShowMessage}" CommandParameter="have param"/>
5.绑定命令的方式
(1) button类型的按钮 直接用Command绑定
<Button Width="60" Height="30" Command="{Binding ShowMessage}"/>
(2) InputBindings.MouseBinding 鼠标事件绑定
例:
<Label Content="点击我呀" HorizontalAlignment="Left" Height="23" Margin="243,256,0,0" VerticalAlignment="Top" Width="120">
<Label.InputBindings>
<MouseBinding MouseAction="LeftClick" Command="{Binding CmdShow}"></MouseBinding>
</Label.InputBindings>
</Label>
MouseAction:
// 不执行任何操作。
None = 0,
// 单击鼠标左键。
LeftClick = 1,
// 单击鼠标右键。
RightClick = 2,
// 单击鼠标按钮。
MiddleClick = 3,
// 单次鼠标轮旋转。
WheelClick = 4,
// 双击鼠标左键。
LeftDoubleClick = 5,
// 双击鼠标右键。
RightDoubleClick = 6,
// 双击鼠标按钮。
MiddleDoubleClick = 7
(3)InputBindings.KeyBinding 键盘事件绑定
<Window.InputBindings>
//按键A
<KeyBinding Key="A" Command="{Binding CmdShow}"/>
//按键Ctrl + B
<KeyBinding Gesture="Ctrl + B" Command="{Binding CmdShow}"/>
//按键Shift+C
<KeyBinding Modifiers="Shift" Key="C" Command="{Binding CmdShow}"/>
</Window.InputBindings>
key(enum Key):单个按键
Gesture:组合按键
Modeifers(enum ModifierKeys):指定修改键集 和key组合使用
public enum ModifierKeys
{
// 按下没有任何修饰符。
None = 0,
// ALT 键。
Alt = 1,
// CTRL 键。
Control = 2,
// SHIFT 键。
Shift = 4,
// Windows 徽标键。
Windows = 8
}
参考:
https://www.cnblogs.com/weiweiboqi/p/4682136.html
WPF绑定命令的更多相关文章
- WPF采用MVVM模式(绑定:纯前台、命令:触发器绑定命令)
MVVM绑定 view-viewModel-model,模型介绍省略,就是创建类,添加字段封装属性.注:控件的绑定只能绑定到属性上,不能绑定到字段上: 接下来就是代码 (view): <Wind ...
- WPF 在事件中绑定命令(不可以在模版中绑定命令)
其实这也不属于MVVMLight系列中的东东了,没兴趣的朋友可以跳过这篇文章,本文主要介绍如何在WPF中实现将命令绑定到事件中. 上一篇中我们介绍了MVVMLight中的命令的用法,那么仅仅知道命令是 ...
- WPF 在事件中绑定命令
导航:MVVMLight系列文章目录:<关于 MVVMLight 设计模式系列> 其实这也不属于MVVMLight系列中的东东了,没兴趣的朋友可以跳过这篇文章,本文主要介绍如何在WPF中实 ...
- 整理:WPF中应用附加事件制作可以绑定命令的其他事件
原文:整理:WPF中应用附加事件制作可以绑定命令的其他事件 目的:应用附加事件的方式定义可以绑定的事件,如MouseLeftButton.MouseDouble等等 一.定义属于Control的附加事 ...
- 整理:WPF用于绑定命令和触发路由事件的自定义控件写法
原文:整理:WPF用于绑定命令和触发路由事件的自定义控件写法 目的:自定义一个控件,当点击按钮是触发到ViewModel(业务逻辑部分)和Xaml路由事件(页面逻辑部分) 自定义控件增加IComman ...
- WPF之事件绑定命令
目录 事件绑定意义 无参数的事件绑定 带EventArgs参数的事件绑定 使用事件绑定 扩展:基于InvokeCommandAction源码的实现(推荐) 参考资料 事件绑定意义 一般事件的处理程序都 ...
- WPF快速入门系列(4)——深入解析WPF绑定
一.引言 WPF绑定使得原本需要多行代码实现的功能,现在只需要简单的XAML代码就可以完成之前多行后台代码实现的功能.WPF绑定可以理解为一种关系,该关系告诉WPF从一个源对象提取一些信息,并将这些信 ...
- WPF C# 命令的运行机制
1.概述 1.1 WPF C# 命令的本质 命令是 WPF 中的输入机制,它提供的输入处理比设备输入具有更高的语义级别. 例如,在许多应用程序中都能找到的“复制”.“剪切”和“粘贴”操作就是命令. W ...
- WPF 的命令的自动刷新时机——当你 CanExecute 会返回 true 但命令依旧不可用时可能是这些原因
原文:WPF 的命令的自动刷新时机--当你 CanExecute 会返回 true 但命令依旧不可用时可能是这些原因 在 WPF 中,你可以使用 Command="{Binding Walt ...
随机推荐
- sqlalchemy 的操作
使用PyMySQL的前提: 1. 先建好表 2. 自己动手需要手动去写多条SQL语句 改进: 类 ------> 表 实例化 -> 数据 这种思想叫:ORM(Object Relatio ...
- APP安全_Android渗透环境
Android渗透 移动APP大多通过WEB API服务的方式与服务端进行交互,这种模式把移动安全和web安全绑在一起.常见的web漏洞在移动APP中也存在,比如SQL注入,文件上传,中间件/serv ...
- Mac 操作小技巧
系统版本 MacOs Mojava # 快捷键篇: 1. 打开终端:command+空格,输入terminal:在终端页面,新建终端command + T 2. 打开文件夹:command + T 3 ...
- Highest Frequency Letters
Given a list of strings, output the most frequent characters that are in the same group as the lette ...
- [转帖]CentOS7安装xrdp(windows远程桌面连接linux)
CentOS7安装xrdp(windows远程桌面连接linux) https://blog.csdn.net/sgrrmswtvt/article/details/81869208 You Konw ...
- Base64encoder干什么用的
https://baike.baidu.com/item/base64/8545775?fr=aladdin BASE64加密算法.用来给字符串加密的.已经不安全了. 一直以来Base64的加密解密都 ...
- Update语句的Output从句结构
原文:Update语句的Output从句结构 一,先看1个列子 ) dbo.Table_1 set status = 'C' --2,选择前3条数据output deleted.id,deleted. ...
- 图的DFS与BFS遍历
一.图的基本概念 1.邻接点:对于无向图无v1 与v2之间有一条弧,则称v1与v2互为邻接点:对于有向图而言<v1,v2>代表有一条从v1到v2的弧,则称v2为v1的邻接点. 2.度:就是 ...
- Keepalive+双主
一.建立3台服务器之间ssh互信在mydb1,mydb2,mydb3服务器上分别执行:ssh-keygen -t rsassh-copy-id -i .ssh/id_rsa.pub root@192. ...
- http请求之of_ordering_http_get
//Public function of_ordering_http_get (string as_url) returns string //string as_urllong ll_tempstr ...