2011-10-10 74 views
0

我正在處理有多個列表視圖的WPF應用程序。如何在WPF中一個接一個地加載UI控件

我得到所有列表視圖一次所需的所有數據。但是,我的要求是,列表視圖中包含的項目數量應該先加載並在下一個列表視圖開始加載之前先顯示給用戶。

所以基本上,我需要ListView1加載並首先讓用戶可見。然後,ListView2開始加載,並在完成時顯示給用戶。換句話說,所有的列表視圖都是在頁面加載9時加載的),並且每個列表視圖在加載後立即可見。

我嘗試使用相當於DoEvents()的東西 http://www.cnblogs.com/sheva/archive/2006/08/24/485790.html 但它沒有奏效。

只是爲了澄清; 當頁面被加載並且lv1的項目被填充並且lv1與項目一起被顯示時,但是lv2和lv3將是EMPTY。然後加載lv2的物品,我們應該看到lv1和lv2填充其物品。此時lv3應該是可見的並且是空的。然後我們將獲得lv3的項目,並且所有的列表視圖都將被填充。所有這些應該在第一個裝載物品後立即可見。 任何人都可以提出任何方式來實現這一目標?

謝謝。

+0

你能澄清你想如何實現它嗎?你想要所有的列表視圖可見,但有些是空的嗎?或者你想讓它們一個接一個地看到? – whoisthis

+0

我希望保持所有列表視圖可見,並逐個填充它們。但是,第二種選擇也是可以的。 –

+0

如果你使用'Visibility = Hidden'加載所有的ListViews,因爲它們全部都會立即加載,然後使用'KeyFrame'動畫爲所有這些元素觸發'Visibility'到'Visible',而不是基於元素的'可見性'一個接一個。 –

回答

0

我會使用後臺線程或Dispatcher按順序加載您的ListBoxes。

因此,您將一次獲得所有數據,檢查哪一個應先載入,然後在另一個線程上啓動。當該過程結束時,啓動下一個。當第二個完成時,加載第三個。

這裏有一個粗略的例子:

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; 
     } 
    } 
} 
+0

謝謝。這種方法適用於我,因爲我可以在listbox2加載時看到listbox1中的項目。然而,我可以更好地選擇一個項目(以任何方式通過激發來自listbox1的事件),當第二個被加載時。 –

0

我使用BackgroundWorker的獲取數據的第一列表視圖。 完成backgroundworker後,我填充了第一個ListView。然後再次使用backgroundworker獲得第二個listview的數據,onComplete填充第二個列表視圖等。

還使用BusyIndi​​cator(WPFToolKitExtended)作爲正在加載的列表視圖。

+0

需要保持UI的東西,並獲取數據的東西分開,以便後臺工作人員不會在UI上得到一個手。 –

相關問題