聊一下Button事件、命令、行为的触发顺序
1、我们新建一个xaml
<StackPanel Width="200" Margin="20">
<Button Height="30" Content="按钮" Command="{Binding MsgCommand}" x:Name="btn" Margin="10"/>
</StackPanel>
2、分别在后台写入命令和事件
public ICommand MsgCommand { get; set; }
MsgCommand = new DelegateCommand(ExecuteCommand);
private void ExecuteCommand()
{
MessageBox.Show("触发命令");
}
btn.Click += Btn_Click;
private void Btn_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("触发事件");
}
3、运行,发现事件先触发,
由于事件处理程序是直接附加到按钮的 Click 事件上的,所以在点击按钮时会先触发 Btn_Click 事件处理程序,然后才会执行与按钮 Command 属性相关联的命令 MsgCommand
4、我们接着添加行为
public class ButtonBehavior:Behavior<FrameworkElement>
{
public string SelectItem
{
get { return (string)GetValue(SelectItemProperty); }
set { SetValue(SelectItemProperty, value); }
}
public static readonly DependencyProperty SelectItemProperty =
DependencyProperty.Register("SelectItem", typeof(string), typeof(ButtonBehavior), new PropertyMetadata(null,OnSelectedChanged));
private static void OnSelectedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
MessageBox.Show("回调");
}
protected override void OnAttached()
{
MessageBox.Show("OnAttached");
}
protected override void OnChanged()
{
MessageBox.Show("OnChanged");
}
protected override void OnDetaching()
{
MessageBox.Show("OnDetaching");
}
}
5、修改前台代码和后台代码
<StackPanel Width="200" Margin="20">
<i:Interaction.Behaviors>
<local:ButtonBehavior SelectItem="{Binding SelectedValue,Mode=TwoWay}"/>
</i:Interaction.Behaviors>
<Button Height="30" Content="按钮1" Command="{Binding MsgCommand}" x:Name="btn" Margin="10"/>
</StackPanel>
public class MainWindowViewModel : BindableBase
{
private string _selectedValue;
public string SelectedValue
{
get { return _selectedValue; }
set { SetProperty<string>(ref _selectedValue, value); }
}
public MainWindowViewModel()
{
MsgCommand = new DelegateCommand(ExecuteCommand);
}
private void ExecuteCommand()
{
SelectedValue = "123";
MessageBox.Show("触发命令");
}
public ICommand MsgCommand { get; set; }
}
运行后
触发顺序为
1、界面初始化之前,Freezable的Changed事件,2、Behavior的OnAttached事件,
点击按钮后,依次触发,按钮事件、字符串改变,回调,Changed事件,按钮命令,
聊一下Button事件、命令、行为的触发顺序的更多相关文章
- MVVM中间接使用事件(命令)
在使用MVVM模式时, 按照模式的规则是尽量不直接使用事件. 所以对于以前一直使用事件模式的同行来说确实有点头疼. 还好微软给我们提供了几种间接使用事件(命令)的方法, 下面我就来看看这几种方法: I ...
- Visual Studio 生成事件命令
Visual Studio在生成项目工程前后,有时我们需要做一些特殊的操作,比如:拷贝生成的dll到指定目标下面等. 结合VS可以添加预先生成事件和后期生成事件,采用命令或bat批处理. 1.Visu ...
- 10、网页制作Dreamweaver(扩展:各浏览器对 onunload 事件的支持与触发条件实现有差异)
标准参考 在 HTML 4.01 规范中关于 onunload 事件的描述是:当 document 从 window 中移除时,触发 onunload 事件. 关于 HTML 4.01 规范中 onu ...
- Javascript事件触发顺序
html标签是有子和父的,这个时候就出现了事件触发顺序的问题,比如: <!DOCTYPE html> <html> <head> <style> .fi ...
- 关于JS 事件冒泡和onclick,click,on()事件触发顺序
今天在给JQgrid中的标签添加click事件的时候,发现一个问题. JQgrid的table中,点击任何位置,都会勾选点击行的checkbox,而我希望在点击我的标签的时候,不要勾选checkbox ...
- DataGridView的Cell事件的先后触发顺序
最近正在使用“DataGridView”对一个旧的Vs 2003开发的WINDOWS应用程序进行改造. 发现Vs 2003中的"DataGrid"中的一些事件已经在新的控件Data ...
- 针对focus和blur的Dom事件触发顺序
Dom事件触发顺序,拿文本框举例: 它会先触发focus事件,之后才会触发在有交点之后才能触发的一些如 click change 等事件(但如果有mousedown则先执行). 而相对于blur而言 ...
- .Net Install类的Install、Commit等事件触发顺序
.Net Install类的Install.Commit等事件触发顺序 空间 首先是Install其中调用base.Install过程中导致OnBeforeInstallOnAfterInstal ...
- Android实现Button事件的处理
Android实现Button事件的处理 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 代码实现 首先是最基本的线性布局,给每个控件设立id值,以供代 ...
- 项目属性-->生成事件-->后期生成事件命令行
以开源记牌器https://github.com/Epix37/Hearthstone-Deck-Tracker 为例,Hearthstone Deck Tracker项目中的后期生成事件命令行: i ...
随机推荐
- JS Leetcode 374. 猜数字大小 题解分析
壹 ❀ 引 本题来自LeetCode 374. 猜数字大小,题目难度简单,与昨天的题目一样,也是一道标准二分法的题目,不知道是不是端午节的缘故,这两天的题目都比较简单,题目描述如下: 猜数字游戏的规则 ...
- JS Leetcode 263. 丑数 题解分析,来认识有趣的丑数吧
壹 ❀ 引 本题来自LeetCode263. 丑数,难度简单,题目描述如下: 给你一个整数 n ,请你判断 n 是否为 丑数 .如果是,返回 true :否则,返回 false . 丑数 就是只包含质 ...
- MFC-ODBC API动态连接配置数据库
一.ODBC管理器介绍 在Window中,ODBC数据远管理器有6个标签:用户DSN.系统DSN.文件DSN.驱动程序.跟踪.连接池,通常情况下,使用用户DSN或者系统DSN,这里主要了解用户DSN和 ...
- NC208250 牛牛的最美味和最不美味的零食
题目链接 题目 题目描述 牛牛为了减(吃)肥(好),希望对他的零食序列有更深刻的了解,所以他把他的零食排成一列,然后对每一个零食的美味程度都打了分,现在他有可能执行两种操作: eat k:吃掉当前的第 ...
- Laravel入坑指南(2)——路由、控制器
接上一节,我们已经把Laravel有Hello World项目跑起来了. 现在各位小友最着急的,应该是想了解,我们怎么在"页面"echo一个自己的Hello World字符串. & ...
- Layui项目实战干货总结(精品)
写代码时遇到的知识点拿出来分享. 1.layer弹出层显示在top顶层 // 监听工具条 table.on('tool(tb-book)', function (obj) { var data = o ...
- 记一次 .NET某列控连锁系统 崩溃分析
一:背景 1. 讲故事 过年喝了不少酒,脑子不灵光了,停了将近一个月没写博客,今天就当新年开工写一篇吧. 去年年初有位朋友找到我,说他们的系统会偶发性崩溃,在网上也发了不少帖子求助,没找到自己满意的答 ...
- 2020-11-18 原生js实现自动打字效果
原理 使用定时器,对要输出的文字进行遍历,每遍历一次,都增加一个字以及在段尾加上"|"暗示别人正在打字. js代码 const fangWrite = (theString, qu ...
- linux下安装django2.2
安装 pip3 install django==2.2 创建项目 django-admin startproject pyweb 创建应用 django-admin startapp app01 修改 ...
- C程序分别实现下列字符阵列的输出
C程序分别实现下列字符阵列的输出:(https://zhuanlan.zhihu.com/p/443989560 可以参考这个博主写的) 1,左下三角形(代码) 1 #include <s ...