如何在WPF中逐个加载UI控件
我正在开发一个WPF应用程序,其中有多个列表视图 我一次获得所有列表视图所需的所有数据。但是,我的要求是,在开始加载下一个列表视图之前,应该首先加载项目数较少的列表视图,并将其显示给用户 因此,基本上,我需要首先加载ListView1并使其对用户可见。然后开始加载ListView2,当用户看到complete时。换句话说,当页面一个接一个地加载时,所有列表视图都会加载,并且每个视图在加载后都会显示出来 我尝试使用与DoEvents()相当的东西 但它没有起作用 只是澄清一下; 当页面被加载,lv1的项目被填充,lv1显示项目,但是lv2和lv3将为空。然后加载lv2的项目,我们应该看到lv1和lv2填充了它们的项目。此时,lv3应该可见且为空。然后,我们将获得lv3的项目,并填充所有列表视图。在第一个项目加载后,所有这些项目都应该立即可见。 有人能提出实现这一目标的方法吗如何在WPF中逐个加载UI控件,wpf,user-interface,wpf-controls,doevents,Wpf,User Interface,Wpf Controls,Doevents,我正在开发一个WPF应用程序,其中有多个列表视图 我一次获得所有列表视图所需的所有数据。但是,我的要求是,在开始加载下一个列表视图之前,应该首先加载项目数较少的列表视图,并将其显示给用户 因此,基本上,我需要首先加载ListView1并使其对用户可见。然后开始加载ListView2,当用户看到complete时。换句话说,当页面一个接一个地加载时,所有列表视图都会加载,并且每个视图在加载后都会显示出来 我尝试使用与DoEvents()相当的东西 但它没有起作用 只是澄清一下; 当页面被加载,lv
谢谢。我会使用后台线程,或
调度程序
按顺序加载列表框
因此,您可以一次获取所有数据,检查应该首先加载哪个数据,然后在另一个线程上启动该数据。该过程完成后,启动下一个过程。当第二个完成时,加载第三个
下面是一个粗略的例子:
var list1 = new int { 1, 2, 3, 4 };
var list2 = new int { 5, 6, 7 };
var list3 = new int { 8, 9 };
// Optionally do whatever checks needed to figure out which
// list should load first
this.Dispatcher.BeginInvoke(DispatcherPriority.Background,
new Action(delegate()
{
MyListBox1.ItemsSource = list1;
this.Dispatcher.BeginInvoke(DispatcherPriority.Background,
new Action(delegate()
{
MyListBox2.ItemsSource = list2;
this.Dispatcher.BeginInvoke(DispatcherPriority.Background,
new Action(delegate()
{
MyListBox3.ItemsSource = list3;
}
}
}
我使用backgroundworker获取第一个listview的数据。 在backgroundworker完成后,我填充了第一个ListView。然后使用backgroundworker和onComplete再次获取第二个列表视图的数据,并填充第二个列表视图,依此类推
还为正在加载的listview使用了BusyIndicator(WPFToolKitExtended)。您能说明一下如何实现它吗?是否希望所有列表视图都可见,但有些视图为空?或者你想让这些视图一个接一个地可见?我更愿意让所有列表视图都可见,并逐个填充它们。但是,第二个选项也可以。如果您使用
可见性=隐藏加载所有列表视图,这是可能的,因为它们都将在短时间内加载,然后使用关键帧动画触发所有基于previou元素可见性的元素的可见性到可见。嘿,尼哈尔,看看这个,他为DelayBinding做了一个实现。也许你可以调整一下,让它可以在一段时间后绑定到你的其他列表。这将确保您不必管理视图端和视图模型端之间的状态,也不需要嵌套消息泵(我认为这会使代码有点复杂),谢谢。这种方法对我很有效,因为在加载listbox2时,我可以看到listbox1中的项目。不过,最好是在加载第二个列表框1时,我可以从列表框1中选择一个项目(以任何方式使用,从中触发事件)。需要将UI内容和获取数据内容分开,以便backgroundworker不会插手UI。