VS无法正常加载Wpf后台刷新ui的自定义控件

今天,在用wpf制作一个UserControl被其他控件加载调用时遇到了一个问题,现在分享出来,给以后遇到这个问题的人解惑。
问题:就是这里使用了一个自定义控件,该控件中在Load函数采用了后台线程Backgroundworker来刷新UI控件中的数据。具体的代码如下所示:

public partial class ParameterConfig_Alarm : UserControl
{
     public ParameterConfig_Alarm()
     {
        InitializeComponent();
        backgroundworker1 = new BackgroundWorker();
        backgroundworker1.DoWork += backgroundworker1_DoWork;
     }       
    private void backgroundworker1_DoWork(object sender,DoWorkEventArgs e)
   {
   //就是这条语句采用了从XML文件的数据来刷新控件数据,这是带参数的方式
      alarmFilter1.Dispatcher.Invoke(new Action<string>((string s) => { alarmFilter1.setAlarmlevel(XmlConfig.GetAppConfig(s)); }));
  //就是这条语句采用了从XML文件的数据来刷新控件数据,这是不带参数的方式
      alarmFilter1.Dispatcher.Invoke(new Action(() => { alarmFilter1.setAlarmType(XmlConfig.GetAppConfig("UPLD_FILTER_ALMTYPE")); }));
     alarmFilter1.Dispatcher.Invoke(new Action(() => { alarmFilter1.InsertFilterID(XmlConfig.GetAppConfig("UPLD_FILTER_ALMID")); }));
     alarmFilter1.Dispatcher.Invoke(new Action(() => { alarmFilter1.InsertFilterCode(XmlConfig.GetAppConfig("UPLD_FILTER_ALMCODE")); }));
     m_setAlmCountColor();            
   }
   private void ParameterConfig_Warn_Load(object sender, RoutedEventArgs e)
   {        
        backgroundworker1.RunWorkerAsync();
   }
}

就是上面的这个控件在下面的控件来调用其的时候,会出现无法加载的情况,具体的控件调用XAML代码,如下:

<Controls:MetroWindow x:Class="INMS.MainWindow"
        xmlns:wfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
        xmlns:wf ="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
        xmlns:local="clr-namespace:INMS"
        Title="集中网管服务端" Height="1085" Width="1920" WindowState="Maximized">
        <Grid>
        <local:ParameterConfig_Alarm />
        </Grid>

在Grid中调用该UserCOntrol,虽然可以正常运行,但是在动态对页面进行显示的时候,会出现下图所示的问题:
这里写图片描述
这里主要导致的原因是用户控件中的
alarmFilter1.Dispatcher.Invoke(new Action<string>((string s) => { alarmFilter1.setAlarmlevel(XmlConfig.GetAppConfig(s)); }));

中采用了参数的缘故。
虽然不会导致无法运行,但是会影响后面的设计。具体是什么原因导致的,容我三思。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF MVVM模式中,可以通过在ViewModel中使用ObservableCollection来动态添加自定义控件。ObservableCollection是.NET Framework提供的一个集合类,它能够在集合元素发生变化时自动通知界面进行更新。 首先,在ViewModel中声明一个ObservableCollection属性,用于存储自定义控件的集合。然后,在需要添加自定义控件的地方,通过操作ObservableCollection来添加新的控件。ViewModel会自动通知界面进行更新。 接下来,界面需要绑定这个ObservableCollection属性,并使用数据模板来定义如何渲染每个自定义控件。在XAML中,可以使用ItemsControl或者ListBox等控件来展示这个集合,并通过绑定将集合和数据模板关联起来。 在这个过程中,可以根据需要使用拖放、缩放、旋转等功能。可以参考中的示例代码,了解如何实现这些功能。 最后,通过实例化ViewModel,并将其赋值给界面的DataContext属性,从而建立ViewModel和View之间的关联。可以参考中的代码。 总结起来,实现在WPF MVVM模式中动态添加自定义控件的步骤为: 1. 在ViewModel中声明一个ObservableCollection属性,用于存储自定义控件的集合; 2. 在需要添加自定义控件的地方,通过操作ObservableCollection来添加新的控件; 3. 在界面中,绑定这个ObservableCollection属性,并使用数据模板来定义如何渲染每个自定义控件; 4. 根据需要使用拖放、缩放、旋转等功能; 5. 实例化ViewModel,并将其赋值给界面的DataContext属性,建立ViewModel和View之间的关联。 希望这个实现思路对你有帮助,如果需要更详细的代码示例,可以参考中的文章。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [用WPF mvvm如何动态添加自定义控件问题](https://blog.csdn.net/netyou/article/details/104371498)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [WPF Prism MVVM【动态添加控件并可用鼠标、拖动、缩放、旋转】](https://blog.csdn.net/redfox6843/article/details/126117819)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值