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
相关产品推荐
相关产品推荐

