wpf textbox 有焦点 导致后台更新 前台不跟着改变

这个问题可能是由于 WPF 的数据绑定机制导致的。当 TextBox 有焦点时,它会独立于数据绑定进行更新,这可能会导致前台界面不能及时反映后台数据的变化。

1.使用 UpdateSourceTrigger 属性:

在数据绑定时,将 UpdateSourceTrigger 属性设置为 PropertyChanged。这样当 TextBox 的值发生变化时,就会立即更新数据源。

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


//使用 FrameworkElementFactory 创建 TextBox,可以通过以下方式设置数据绑定并指定 UpdateSourceTrigger:

// 创建 FrameworkElementFactory 表示 TextBox
FrameworkElementFactory tbox = new FrameworkElementFactory(typeof(TextBox));

// 设置 Text 属性的数据绑定
Binding binding = new Binding("MyProperty");
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
tbox.SetBinding(TextBox.TextProperty, binding);

2...手动触发 INotifyPropertyChanged 事件:

如果您的数据模型实现了 INotifyPropertyChanged 接口,可以在属性值发生变化时手动触发 PropertyChanged 事件。这样前台界面就能及时更新。

csharp 复制代码
private string _myProperty;
public string MyProperty
{
    get { return _myProperty; }
    set
    {
        _myProperty = value;
        OnPropertyChanged(nameof(MyProperty));
    }
}

protected virtual void OnPropertyChanged(string propertyName)
{
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

3使用 LostFocus 事件:

您可以监听 TextBox 的 LostFocus 事件,在事件处理程序中手动更新数据源。这样可以确保在 TextBox 失去焦点时,数据源已经被更新。

csharp 复制代码
<TextBox Text="{Binding MyProperty}" LostFocus="TextBox_LostFocus" />
private void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
    // 手动更新数据源
    var textBox = (TextBox)sender;
    var dataContext = (YourDataContext)textBox.DataContext;
    dataContext.MyProperty = textBox.Text;
}

4.使用 Binding.UpdateSourceTrigger 属性:

您也可以在代码中设置 Binding.UpdateSourceTrigger 属性,以控制数据源的更新时机。

csharp 复制代码
var binding = new Binding("MyProperty")
{
    UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
};
textBox.SetBinding(TextBox.TextProperty, binding);
相关推荐
Chris _data4 天前
WPF 学习第三天 — Modbus RTU 串口通信
hadoop·学习·wpf
布吉岛的石头4 天前
Java 程序员第 43 阶段05:微服务整合大模型,跨服务调用架构设计实战,Seata分布式事务实战
wpf
步步为营DotNet4 天前
基于.NET Aspire 实现云原生应用的高效监控与可观测性
云原生·.net·wpf
芒鸽5 天前
HarmonyOS 分布式开发实战:设备协同、数据共享与跨设备迁移
分布式·wpf·harmonyos
Volunteer Technology5 天前
Flink状态管理与容错(二)
大数据·flink·wpf
happyprince6 天前
07_verl-Trainer模块详解
人工智能·架构·wpf·强化学习
bugcome_com6 天前
WPF + Prism 技术指南与实战项目(二、模板搭建)
wpf
小满Autumn6 天前
log4net 日志框架 — 从配置到实战速查手册
笔记·c#·.net·wpf·上位机·log4net
政沅同学7 天前
基于 C# WPF + HALCON 的工业视觉算法工具框架(开源)
开发语言·c#·wpf
happyprince7 天前
03_verl-设计理念与核心原理
wpf