wpf textbox框失去焦点,使值及时更新到viewmodel中对应的字段

背景

在页面上用textbox框显示值,textbox的值改变后,但是不会立即传递到viewmodel中:

下面两种方式实现:

在WPF (Windows Presentation Foundation) 中,如果您希望当用户在TextBox中有焦点时点击页面上的空白区域,使焦点从TextBox移开,您可以通过为包含TextBox的容器(如Grid或Panel)或根窗口添加鼠标事件处理器来实现。以下是一种可能的方法:

为您的容器或窗口添加一个MouseDown事件处理器。

在事件处理器中,检查当前具有焦点的元素是否是TextBox。

如果是,将焦点设置到其他元素上,或者简单地使用Keyboard.ClearFocus();来清除焦点。

xaml

csharp 复制代码
<Window x:Class="WpfApp.MainWindow"  
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
        Title="MainWindow" Height="350" Width="525"  
        MouseDown="Window_MouseDown">  
    <Grid>  
        <TextBox x:Name="MyTextBox" HorizontalAlignment="Left" Height="23" Margin="10" TextWrapping="Wrap" Text="{Binding MyProperty, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" VerticalAlignment="Top" Width="120"/>  
        <!-- 其他UI元素 -->  
    </Grid>  
</Window>

C#代码

csharp 复制代码
private void Window_MouseDown(object sender, MouseButtonEventArgs e)  
{  
    if (FocusManager.GetFocusedElement(this) is TextBox)  
    {  
        // 您可以选择将焦点设置到特定元素,或者简单地清除焦点  
        Keyboard.ClearFocus();  
    }  
}

2.如果上面这种方式没有成功,用第二种

如果您在TextBox中使用Keyboard.ClearFocus()来清除焦点,但发现ViewModel的值没有更新,可能是因为数据绑定的更新机制没有被正确触发。

虽然默认情况下TextBox的UpdateSourceTrigger是LostFocus,但如果您在绑定中明确指定了其他值(如PropertyChanged),则可能会更改更新的行为。如果您想要在每次TextBox值改变时立即更新ViewModel,可以将UpdateSourceTrigger设置为PropertyChanged。

xaml

csharp 复制代码
<TextBox Text="{Binding MyProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

将对应的textbox 中的LostFocus 改为PropertyChanged 即可。

csharp 复制代码
UpdateSourceTrigger=PropertyChanged
相关推荐
donk13142 天前
React Native for OpenHarmony 实战:三方库 react-native-circular-action-menu 的鸿蒙化适配指南
javascript·分布式·react native·react.js·wpf·harmonyos
donk13142 天前
React Native for OpenHarmony 实战:三方库 react-native-step-indicator 的鸿蒙化适配指南
分布式·react native·react.js·wpf·harmonyos
He BianGu3 天前
【笔记】WPF中RenderOptions类的详细功能
笔记·wpf
VidDown3 天前
上线三个月后的第一次事故:一个 Django 服务的日志、监控与故障复盘
数据库·python·django·wpf·音视频·视频编解码
He BianGu3 天前
【笔记】WPF中CachingHint的功能
笔记·wpf
He BianGu3 天前
【笔记】在WPF中BitmapScalingMode的作用
笔记·wpf
Vae_Mars3 天前
幂等性学习笔记
笔记·学习·wpf
samble4 天前
从零搭建灌装监控系统(十九):单元测试实战,xUnit + 内存SQLite + 反射测试私有方法
c#·wpf·mvvm·modbus·工业控制
光泽雨5 天前
路由概念和路由事件 继承链路 RadioButton的事件解析
wpf
samble5 天前
从零搭建灌装监控系统(十八):自定义控件,三色灯与状态指示
c#·wpf·mvvm·modbus·工业控制