You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForms点击按钮后WPF UserControl数据不更新问题

问题解决:WPF TextBox未同步VM属性更新的原因及修复

问题根源

你的代码里存在两个完全独立的UserControlWPFVM实例:

  • Form2类中自行初始化了一个UserControlWPFVM对象
  • WPF UserControl内部也初始化了另一个UserControlWPFVM对象,并将其设置为自身的DataContext

点击Form1按钮时,你更新的是Form2维护的VM实例属性,但WPF TextBox绑定的是UserControl内部的VM实例,两者毫无关联,因此界面不会同步变化。

修复方案

修改Form2代码,直接操作UserControl内部绑定的VM实例,而非自行新建:

修改后的Form2.cs

using System.Windows.Forms;
using System.Windows.Forms.Integration;

namespace WindowsFormsApp1
{
    public partial class Form2 : Form
    {
        ElementHost host = new ElementHost();
        private UserControlWPF _wpfUserControl;

        public Form2()
        {
            InitializeComponent();

            _wpfUserControl = new UserControlWPF();
            host.Dock = DockStyle.Fill;
            host.Child = _wpfUserControl;
            this.Controls.Add(host);
        }

        public void InsertText(string text)
        {
            // 直接调用UserControl内部绑定的VM方法
            _wpfUserControl.UserControlWPFVM.InsertText(text);
        }
    }
}

说明

  • 移除Form2中独立的UserControlWPFVM字段,改为保存UserControl的实例引用
  • 通过UserControl的UserControlWPFVM属性,访问真正与界面绑定的VM对象,调用其InsertText方法更新属性
  • Prism的BindableBase基类已通过SetProperty方法触发PropertyChanged事件,WPF绑定会自动监听该事件并更新TextBox内容,无需额外调用host.Update()

内容的提问来源于stack exchange,提问作者gregor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 13:32:35