Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在单击按钮时加载和刷新用户控件_C#_Wpf_User Controls_Load_Refresh - Fatal编程技术网

C# 如何在单击按钮时加载和刷新用户控件

C# 如何在单击按钮时加载和刷新用户控件,c#,wpf,user-controls,load,refresh,C#,Wpf,User Controls,Load,Refresh,我有一个windows窗体应用程序,窗体上的一个控件是WPF用户控件。 我已经在windows窗体上放置了元素主机控件,这是在启动时加载我的用户控件 我想要的是在特定时间加载和刷新用户控件。因为我需要加载新的数据 我尝试了elementHost1.Refresh()这并没有做任何事情 如何加载和刷新此文件 这是我在此上的用户控件再次调用加载事件时会发生什么 或者至少是您用于在表单中填充数据的方法> i、 e.调用您的this.Load(null,null)(或者根据需要传递一些对象或事件) 或者

我有一个windows窗体应用程序,窗体上的一个控件是WPF用户控件。 我已经在windows窗体上放置了元素主机控件,这是在启动时加载我的用户控件

我想要的是在特定时间加载和刷新用户控件。因为我需要加载新的数据

我尝试了
elementHost1.Refresh()这并没有做任何事情

如何加载和刷新此文件


这是我在此上的用户控件

再次调用加载事件时会发生什么

或者至少是您用于在表单中填充数据的方法>

i、 e.调用您的
this.Load(null,null)
(或者根据需要传递一些对象或事件)

或者对代码进行重构,这样您就可以调用
BindDataToControlMethod()
方法


您正在进行的
elementHost1.Refresh()
调用只是在屏幕上重新绘制表单。它本身不重新加载。

关于
MVVM
INotifyPropertyChanged
? 使用
INotifyPropertyChanged
可以在数据发生更改时通知视图,并以这种方式刷新它。看来这就是你想要的


请查看两个相关链接:


由于控件不会自动刷新,我假设您不使用数据绑定,这可能是最好的解决方案

假设您有一个(自定义)类型为UserControl1的用户控件,它承载一个名为MyButton的按钮

您可以创建一个新的WPF控件并将其分配给子元素,例如

((UserControl1) (elementHost1.Child)).MyButton = new System.Windows.Button ()
或者按如下方式访问WPF控件

var wpfButton = ((UserControl1) (elementHost1.Child)).MyButton;
然后简单地重置WPF控件的必要属性:

wpfButton.Content = "My new text";

编辑:已更正错误。

使数据提供程序重新读取其源:

var dataprovider = (System.Windows.Data.XmlDataProvider) (
  ((UserControl1) (elementHost1.Child)).Resources ["rssData"]
);
dataprovider.Refresh ();


这是一个通过工具箱加载的控件,这个用户控件只是我屏幕的一部分,屏幕上有一个rss数据,然后我有一个按钮,例如,它将用作刷新。我不想加载所有表单,只想加载调用usercontrol的表单的一个小端口。这就是问题所在。如果这是一个全屏模式,那么我将加载所有表单并完成。我认为您可以对用户控件应用与对整个表单相同的逻辑。两者都是可以重新实例化的对象。如果你打电话时需要过滤结果,你必须自己过滤,因为这里没有足够的信息供我尝试。告诉我你需要什么,因为我不太明白你在说什么。因此,我有一个按钮和用户控件,通过windows窗体设计器上的工具箱加载到elementHost1中。这就是我的全部,因为我想试试它的工作原理。是否需要usercontrol代码?当窗体加载时,您将加载ElementHost。在其中加载您个人生成的userControl。到目前为止是这样吗?当你的数据加载到你的usercontrol中时,你是如何将它输入到你的usercontrol中的?我已经编写了usercontrol,并且我已经创建了这个文件,它就在我的项目中。我已经从工具箱中添加了elementhost,如果您已经创建了wpf文件,它可以选择加载wpf文件。所以基本上这是在表单启动时加载的。数据在我加载Drom RSS链接之前就已经加载了,这些都是非常好的文章。但这是针对c#中写入的用户表单。我已经将表单创建为用户控件,该控件仅加载到elementhost控件中。我想在按下按钮时刷新它。我添加了一个链接,在那里你可以看到用户控件的代码。我有数据绑定,因为这个用户控件是rss阅读器,所以我有数据绑定。我只想在单击按钮时刷新我添加了一个链接,您可以在其中看到用户控件的代码,但是您可能希望更新XML数据提供程序,而不是其中一个控件???给数据提供程序一个名称,通过elementHost1.Child[“数据提供程序的名称”]访问它,将其转换为XmlDataProvider,并在数据提供程序上调用Refresh()!看我的另一篇文章。伙计们,你们可以简单地尝试一下,若你们创建了新的windows窗体项目,插入我的代码和rss lnk,并尝试在点击按钮时刷新它。我就是这么做的。在Windows窗体中插入一个(Windows窗体)按钮,并将下面的两行代码添加到按钮单击处理程序中。信不信由你,它管用。我试试看,然后告诉你。你测试过吗?部分测试过。UserControl1应该是你的UserControl类。我只是从工具箱中添加了一个elementhost,我没有手动创建它,因为这个wpfs对我来说太新了,你不需要手动创建它;windows窗体类将包含一个表示元素宿主的成员;顺便说一句,我现在已经试过了,它可以工作了。当我把链接放在[]中时,你怎么放的,我为什么会得到空异常
var dataprovider = (System.Windows.Data.XmlDataProvider) (
  ((UserControl1) (elementHost1.Child)).Resources ["rssData"]
);
dataprovider.Refresh ();