我有一个 Windows 窗体应用程序,窗体上的控件之一是 WPF 用户控件。我已将元素主机控件放在 Windows 窗体上,这是在启动时加载我的用户控件。
我想要的是在特定时间加载和刷新用户控件。因为我需要加载新数据。
我已经尝试过elementHost1.Refresh();
了,但这并没有做任何事情。
如何加载和刷新它?
这是我在此LINK上的用户控件
让数据提供者重新读取其来源:
var dataprovider = (System.Windows.Data.XmlDataProvider) (
((UserControl1) (elementHost1.Child)).Resources ["rssData"]
);
dataprovider.Refresh ();
What about MVVM
and INotifyPropertyChanged
?
Using INotifyPropertyChanged
you can notify View when data has been changed and refresh it in this way. Seems like this is what you want.
Take a look into couple related links:
由于您的控件不会自动刷新,我假设您不使用数据绑定,这可能是最好的解决方案。
假设您有一个(自定义)类型 UserControl1 的用户控件,它承载一个名为 MyButton 的按钮。
您可以创建一个新的 WPF 控件并将其分配给子元素,例如
((UserControl1) (elementHost1.Child)).MyButton = new System.Windows.Button ()
或者您按如下方式访问 WPF 控件
var wpfButton = ((UserControl1) (elementHost1.Child)).MyButton;
然后简单地重置 WPF 控件的必要属性:
wpfButton.Content = "My new text";
编辑:错误更正。
当你再次调用你的加载事件时会发生什么?
或者至少是您用来在表单中填充数据的方法>
即要么调用你的this.Load(null,null)
(或根据需要传递一些对象或事件)
private void form1_load(object o, EventArgs e)
{
BindDataToControlMethod();
}
或者重构你的代码,这样你就可以调用你的BindDataToControlMethod()
方法。
elementHost1.Refresh()
您正在拨打的电话只是在屏幕上重新绘制表单。它本身不会重新加载。