我正在开发一个WPF应用程序,其中有多个列表视图。
我立刻获得了所有列表视图所需的所有数据。但是,我的要求是,在下一个列表视图开始加载之前,应首先加载具有较少项目的列表视图并显示给用户。
基本上,我需要首先加载ListView1并使其对用户可见。然后ListView2开始加载,并在完成后对用户可见。换句话说,当页面一个一个地加载时加载所有列表视图,并且每个列表视图在加载后立即可见。
我尝试使用与DoEvents相当的东西() http://www.cnblogs.com/sheva/archive/2006/08/24/485790.html 但它没有用。
只是为了澄清; 加载页面时,将填充lv1的项目,并显示包含项目的lv1,但lv2和lv3将为EMPTY。然后加载lv2的项目,我们应该看到lv1和lv2填充了他们的项目。此时lv3应该是可见的并且是空的。然后我们将获取lv3的项目,并将填充所有列表视图。所有这些都应该在第一个加载其项目后立即可见。 任何人都可以提出任何方法来实现这一目标吗?
感谢。
答案 0 :(得分:0)
我会使用后台线程,或Dispatcher
按顺序加载ListBox。
因此,您可以立即获取所有数据,检查哪个数据应首先加载,然后在另一个线程上启动。当该过程完成时,启动下一个过程。当第二个完成时,加载第三个。
这是一个粗略的例子:
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;
}
}
}
答案 1 :(得分:0)
我使用backgroundworker获取第一个listview的数据。 在完成后台工作时,我填充了第一个ListView。然后使用backgroundworker再次获取第二个listview的数据,并在onComplete中填充第二个列表视图,依此类推。
还将BusyIndicator(WPFToolKitExtended)用于正在加载的列表视图。