Mvvm KeyDown的实现以及TextBox绑定的属性不更新问题的解决

今天写程序的时候遇到了个问题:使用mvvm给TextBox在vm层实现KeyDown键盘事件时,TextBox绑定的vm层属性不更新。

但在TextBox下加个按钮时就更新了。这个问题困扰了我好一会,最后才想起来是更新时机没有给定,所以默认的是LostFocus,故改为PropertyChanged就好了。

 1 <Window x:Class="TestDemo1.MainWindow"
 2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4         xmlns:cmd="http://www.galasoft.ch/mvvmlight"
 5         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 6         xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
 7         xmlns:ignore="http://www.galasoft.ch/ignore"
 8         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 9         Title="MVVM Light Application"
10         Width="300"
11         Height="300"
12         DataContext="{Binding Main,
13                               Source={StaticResource Locator}}"
14         mc:Ignorable="d ignore">
15
16     <Window.Resources>
17         <ResourceDictionary>
18             <ResourceDictionary.MergedDictionaries>
19                 <ResourceDictionary Source="Skins/MainSkin.xaml" />
20             </ResourceDictionary.MergedDictionaries>
21         </ResourceDictionary>
22     </Window.Resources>
23
24     <Grid x:Name="LayoutRoot">
25         <StackPanel>
26             <TextBlock Margin="0,50,0,0"
27                        HorizontalAlignment="Center"
28                        VerticalAlignment="Center"
29                        FontWeight="Bold"
30                        Foreground="Purple"
31                        Text="{Binding WelcomeTitle}"
32                        TextWrapping="Wrap" />
33             <TextBox Margin="20" Text="{Binding MyField, UpdateSourceTrigger=PropertyChanged}">
34                 <i:Interaction.Triggers>
35                     <i:EventTrigger EventName="KeyDown">
36                         <cmd:EventToCommand Command="{Binding MyTestCommand}" />
37                     </i:EventTrigger>
38                 </i:Interaction.Triggers>
39             </TextBox>
40             <Button Height="20"
41                     Command="{Binding CmdBtn}"
42                     Content="Button" />
43         </StackPanel>
44     </Grid>
45 </Window>

链接:http://files.cnblogs.com/files/zhangyongheng/TestDemo1.rar

时间: 2024-08-03 01:28:53

Mvvm KeyDown的实现以及TextBox绑定的属性不更新问题的解决的相关文章

TextBox 绑定到DataTable某一列属性上

将TextBox绑定到DataTable某一列属性上 DataTable dt = GetDataTable() textBox1.DataBindings.Add("Text", dt, "columnName", true); 当修改TextBox值时,必须要鼠标手动点击对应DataTable 列单元格(绑定到DataGridView中显示)才会更新,如何实时自动更新呢? 可以在TextBox中添加Validated事件(或者MouseLeave事件)实现更新D

在c#中的TextBox响应回车键发出“咚”的一声解决方法

在Win7系统的VS2012下的Form中,响应TextBox的KeyDown事件后,当按下回车键时发出“咚”的一声,百度后得到一下这样一个说法: 这是对于 windows 窗口标准程序而言,每个窗口/对话框有两个特殊的按钮,一个是 Enter 按下时的按钮,一个是 Esc 按下时的按钮,它们分别对应 Form 对象的 AccpetButton 与 CancelButton 属性,当你在一个非支持输入换行的控件里回车时,这个事件由窗口对象管理,如果它没有找到 AccpetButton 或对应的按

绑定元素属性改变不通知界面

情景假设:绑定的是一个Point,当Point的X或者Y属性发生改变时,绑定的点也随界面改变 此时界面不会发生改变 原因:当X或者Y属性发生改变时并没有触发Point的Set方法 1 <Grid> 2 <Grid.Resources> 3 <local:PConverter x:Key="converter"/> 4 <local:PointsConverter x:Key="pointsC"/> 5 6 <St

绑定DOM属性

绑定title属性 <div id="app2"> <span v-bind:title="mess2">鼠标停留此处查看title</span> </div> <div id="app2"> <span v-bind:title="mess2">鼠标停留此处查看title</span> </div> 上面代码中,v-bind属性被

C# 利用TextBox的Text属性实现换行加字符 &quot;\r\n&quot;

要让一个TextBox显示多行文本就得把它的Multiline属性设置为true,可是如果你是要把TextBox的Text属性设置多行文本时,换行符由两个字符组成:"\r\n". TextBox1.Text = "First \nSecond \nThird ";运行的时候不会换行. 其实主要是因为TextBox运行在Windows上.Windows能够显示的换行必须由两个字符组成:"\r\n". 如果只是"\n"在Windo

WPF ----在UserControl的xaml里绑定依赖属性

场景:在定义wpf 用户控件的时候,希望使用时设置自定义的属性来改变用户控件里的状态或内容等. 下面直接上实例代码: 用户控件的后台代码,定义依赖属性 public partial class MyUserControl : UserControl { public MyUserControl() { InitializeComponent(); } public string MyProperty { get { return (string)GetValue(MyPropertyProper

SpreadJS 在 Angular2 中支持绑定哪些属性?

SpreadJS 纯前端表格控件是基于 HTML5 的 JavaScript 电子表格和网格功能控件,提供了完备的公式引擎.排序.过滤.输入控件.数据可视化.Excel 导入/导出等功能,适用于 .NET.Java 和移动端等各平台在线编辑类 Excel 功能的表格程序开发. 在上一篇文章中,我们了解到 SpreadJS 已经全面支持了 Angular2,并且只需4步就能完成在 Angular2 中集成 SpreadJS. 下面我们来介绍 SpreadJS 在 Angular2 中支持绑定哪些属

vue属性绑定和属性简写

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>属性绑定和属性简写</title> </head> <script type="text/javascript" src="js/vue.js" ></script> <script> window.onl

Vue学习之路8-v-on指令学习简单事件绑定之属性

前言 上一篇文章以v-on指令绑定click事件为例介绍了v-on指令的使用方法,本文介绍一下v-on绑定事件的一些属性的使用方法. v-on绑定指令属性 .stop属性 阻止单击事件继续向上传播(简单点说就是不让父节点及父节点以上的节点事件触发),本示例如果没有stop属性,父节点和爷爷节点事件将会触发,并在控制台输出内容,示例代码和示例结果如下: 1 1 <template> 2 2 <div> 3 3 <p class="title1">{{t