【问题标题】:ComboBox items loaded event wpf?组合框项目加载事件wpf?
【发布时间】:2011-01-12 20:26:29
【问题描述】:

我有一个组合框,它通过绑定将 ItemsSource 设置为称为 DATA 的 ObservableCollection 属性。 此列表包含大量数据,因此组合框需要一些时间才能完全加载所有项目。

我有一个后台工作人员,它获取所有信息并在完成后设置 ObservableCollection 属性 DATA。虽然发生这种情况,但我会显示一个进度指示器,但是,在我设置 ObservableCollection DATA 之后,UI 似乎仍然会挂起很长一段时间,然后组合框会加载所有项目。

组合框上是否有事件让我知道所有项目何时在 UI 中正确呈现?

谢谢

【问题讨论】:

    标签: wpf binding


    【解决方案1】:

    您可以参考以下代码,这里进度条和搜索都在同一个线程中运行,并使用 Dispatcher 通知 UI:

            DoWorkEventHandler workHandler = null;
            RunWorkerCompletedEventHandler doneHandler = null;
            Action<parameters> actionCompleted = null;
    
            BackgroundWorker worker = new BackgroundWorker();
    
            worker.DoWork += workHandler =
                delegate
                (
                    object oDoWrk,
                    DoWorkEventArgs eWrk
                )
                {
                    worker.DoWork -= workHandler;
                    ServiceProxy service = new ServiceProxy();
                    service.EventWorkCompleted += actionCompleted =
                        delegate(<parameters>)
                        {
                            service.MethodWorkCompleted -= actionCompleted;
                            currentDispatcher.BeginInvoke(
                                new Action<<parameters>>(
                                    OnActionCompleted ), <parameters>);
                        };
    
                    Messenger.Default.Send(
                        new ShowProgressViewMessage( new ProgressViewModel( "Loading..." ) ) );
    
                    service.ServiceMethod();
                };
    
            worker.RunWorkerCompleted += doneHandler =
                delegate
                (
                    object oDone,
                    RunWorkerCompletedEventArgs eDone
                )
                {
                    Logger.LogVerbose( "Method Called" );
    
                    worker.RunWorkerCompleted -= doneHandler;
                };
    
            worker.RunWorkerAsync();
    
    
        private
        void OnActionCompleted(<parameters>)
        {
        }
    

    更新:只是因为版权问题改变了实现,希望你不要介意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-02
      相关资源
      最近更新 更多