WPF MVVM 如何在ViewModel中操作View中的控件事件
(在学习Wpf的时候,做一个小例子,想在TextBox改变后,检验合法性,并弹出提示。在找了很多贴后,发现这个小例子,抄袭过来,仅供参考。
最后也找到了适合自己例子的办法:在出发TextChanged后,做出提示(提示可以根据要求来写),见最后。)
虽然说MVVM模式下不建议在Viewmodel层中操控View层中控件,但是在某些情况下,比如想要得到某个事件的参数,在Viewmodel层中不太方便实现,这时候就可以用下面的方法了。
在XAML中
1、引用组件并设置
xmlns:Interaction="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:Interactivity="http://schemas.microsoft.com/expression/2010/interactivity"
2、DataContext设置
xmlns:VM="clr-namespace:MVVM_.ViewModel"
<Window.DataContext>
<VM:MainWindowViewModel /> < /Window.DataContext>
3、事件触发,以窗口的大小改变事件为例 SizeChanged
<Interactivity:Interaction.Triggers>
<Interactivity:EventTrigger EventName="SizeChanged">
<Interaction:CallMethodAction TargetObject="{Binding}" MethodName="SizeChangedCommand"/>
</Interactivity:EventTrigger>
< /Interactivity:Interaction.Triggers>
在Viewmodel中
public class MainWindowViewModel
{public void SizeChangedCommand(object obj, SizeChangedEventArgs e){}}
最后找出一中合适我测试所需要的,具体如下:
1、xaml中添加引用:
xmlns:ie = "http://schemas.microsoft.com/expression/2010/interractivity"
2、TextBox 代码:
- <TextBox Text="{Binding xxx,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
- <ie:Interaction.Triggers>
- <ie:EventTrigger EventName="TextChanged">
- <ie:InvokeCommandAction Command = "{Binding TextChangedCommand}" CommandParametes="xxxx" />
- </ie:EventTrigger >
- </ie:Interaction.Triggers>
- </TextBox>
大致意思是用Action和Invoke之类的。
- EventName="TextChanged" 是TextBox中的事件,可以更换成自己需要的事件。
3、在后定义委托...(请参照上一篇代码)
4、如果是传窗体(Window)或者按钮Button,用ElementName,如下:
xaml代码:
<Button x:Name="btnSendButInfo" Width="100" Command="{Binding BtnClickCommand}"
CommandParameter="{Binding ElementName=btnSendButInfo}" />
ViewModel:
private DelegateCommand<Button> BtnClickCommand; //申明委托
BtnClickCommand = new DelegateCommand<Button>(BtnClick); //实例化
private void BtnClick(Button btn)
{
string strBtnName = btn.Name;//使用
}
WPF MVVM 如何在ViewModel中操作View中的控件事件的更多相关文章
- VB6/VBA中跟踪鼠标移出窗体控件事件(类模块成员函数指针CHooker类应用)
一.关于起因 前几天发了一篇博文,是关于获取VB类模块成员函数指针的内容(http://www.cnblogs.com/alexywt/p/5880993.html):今天我就发一下我的应用实例. V ...
- WPF中不规则窗体与WindowsFormsHost控件的兼容问题完美解决方案
首先先得瑟一下,有关WPF中不规则窗体与WindowsFormsHost控件不兼容的问题,网上给出的解决方案不能满足所有的情况,是有特定条件的,比如 WPF中不规则窗体与WebBrowser控件的兼 ...
- WinForm中新开一个线程操作 窗体上的控件(跨线程操作控件)
最近在做一个winform的小软件(抢票的...).登录窗体要从远程web页面获取一些数据,为了不阻塞登录窗体的显示,开了一个线程去加载数据远程的数据,会报一个错误"线程间操作无效: 从不是 ...
- Android 在程序中动态添加 View 布局或控件
有时我们需要在程序中动态添加布局或控件等,下面用程序来展示一下相应的方法: 1.addView 添加View到布局容器 2.removeView 在布局容器中删掉已有的View 3.LayoutPar ...
- WPF中不规则窗体与WebBrowser控件的兼容问题解决办法
原文:WPF中不规则窗体与WebBrowser控件的兼容问题解决办法 引言 这几天受委托开发一个网络电视项目,要求初步先使用内嵌网页形式实现视频播放和选单,以后再考虑将网页中的所有功能整合进桌面程序. ...
- 关于如何在 Unity 的 UI 菜单中默认创建出的控件 Raycast Target 属性默认为 false
关于如何在 Unity 的 UI 菜单中默认创建出的控件 Raycast Target 属性默认为 false 我们在 Unity 中通过 UI 菜单创建的各种控件,比如 Text, Image 等, ...
- WPF 中动态创建和删除控件
原文:WPF 中动态创建和删除控件 动态创建控件 1.容器控件.RegisterName("Name",要注册的控件) //注册控件 2.容器控件.FindName(" ...
- 封装:WPF中可以绑定的BindPassWord控件
原文:封装:WPF中可以绑定的BindPassWord控件 一.目的:本身自带的PassWord不支持绑定 二.Xaml部分 <UserControl x:Class="HeBianG ...
- PyQt学习随笔:Qt中Model/View中的Model Index
Qt中Model/View中的Model Index是一个类,该类用于定位Model/View中数据模型中的数据. Model Index是从QAbstractItemModel派生的子类,用于在项视 ...
随机推荐
- MySQL 学习笔记(二):数据库更新、视图和数据控制
基础准备: 在 school 数据库下建立student.course.sc 三个表: create table student( Sno ) primary key, Sname ) unique, ...
- UML之用例图详解
原文链接:https://blog.csdn.net/mj_ww/article/details/53020080 UML,即Unified Model Language,统一建模语言.百度百科对他的 ...
- 【BZOJ1047】[HAOI2007]理想的正方形 (倍增ST表)
[HAOI2007]理想的正方形 题目描述 有一个\(a*b\)的整数组成的矩阵,现请你从中找出一个\(n*n\)的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: ...
- javascript中类数组转成真正的数组
function list() { return Array.prototype.slice.call(arguments); } var list1 = list(1, 2, 3); // [1, ...
- 百度地图中使用mouseover事件获取经纬度时无法拿到鼠标所在位置的经纬度。
用百度2.0的话使用mousemove 鼠标在地图区域移动过程中触发此事件.mouseover参数e中没有point参数
- css3之animation制作闪烁文字效果 转
原文 http://www.w3cfuns.com/notes/13835/596cd96f59a09431a2343a9726c295d5.html <!DOCTYPE html>< ...
- Qt 学习之路 2(50):自定义可编辑模型
Home / Qt 学习之路 2 / Qt 学习之路 2(50):自定义可编辑模型 Qt 学习之路 2(50):自定义可编辑模型 豆子 2013年5月13日 Qt 学习之路 2 13条评论 上一章我们 ...
- Jenkins 更换国内源
jenkins插件清华大学镜像地址https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json1更换地址方法1.进入j ...
- POJ_3414 Pots 【复杂BFS】
一.题面 You are given two pots, having the volume of A and B liters respectively. The following operati ...
- P3345 [ZJOI2015]幻想乡战略游戏
传送门 考虑先随便找一个点作为根,然后再慢慢移动根,这样一步步走到最优的点 设 $sum[x]$ 表示节点 $x$ 的子树的军队数,$len(x,y)$ 表示 $x,y$ 之间边的长度 那么对于根节点 ...