2012-04-29 86 views
2

我的MainPage.xaml是一個包含3個透視項的透視頁。目前它正在爲MainPage構造函數中的每個PivotItems加載所有必需的東西。這很糟糕,因爲它加載了很多不必要的東西。將PivotItem轉換爲Usercontrol以提高WP7中的加載性能

閱讀herehere建議我只加載第一個PivotItem,並在加載後加載剩下的項目。具體來說:

通過按需加載Pivot控件內容來提高數據透視表的性能,而不是在啓動時加載所有內容。一種解決方案是從每個PivotItem控件獲取內容並將其轉換爲UserControls。然後,您可以訂閱根樞軸控件上的LoadingPivotItem事件。接下來,在事件處理程序中,實例化適當的UserControl並將其設置爲PivotItem內容。

如果我按照建議:

private void OnLoadingPivotItem(object sender, PivotItemEventArgs e) 
{ 
if (e.Item.Content != null) 
{ 
    // Content loaded already 
    return; 
} 

Pivot pivot = (Pivot)sender; 

if (e.Item == pivot.Items[0]) 
{ 
    e.Item.Content = new Page1Control(); 
} 
else if (e.Item == pivot.Items[1]) 
{ 
    e.Item.Content = new Page2Control(); 
} 
else if (e.Item == pivot.Items[2]) 
{ 
    e.Item.Content = new Page3Control(); 
} 
} 

我應該使用創建類PageXControl?它應該從主頁類繼承嗎?

如何從每個PivotItem控件獲取內容並將其轉換爲UserControls?

感謝

回答

6

你可以創建自己的透視的項目,這會從PivotItem繼承。我已經把樣本的基礎上,在VS默認的樞紐工程,其打出兩個回物品放入自己的類: -

http://www.smartmobiledevice.co.uk/projects/PivotItemUserControlSample.zip

+0

謝謝。我注意到你使用'PivotItem'作爲樞軸頁面代碼而不是'UserControl'。有什麼區別嗎? – Michael 2012-04-29 16:07:01

+1

我認爲如果您將多個控件放在一起形成另一個控件,您將使用UserControl,但是由於您只對PivotItem感興趣,因此從中派生出來是有意義的。 – 2012-04-29 16:25:31

9

您PivotItems的內容提取到用戶控件其實很簡單。首先,爲每個PivotItems創建一個新的UserControl。然後將PivotItems的內容從PivotItem移到UserControls中。然後按照您的指定在OnLoadingPivotItem方法中創建控件。我在GitHub上創建了一個小項目,向您展示如何執行此操作。見:https://github.com/ErikSchierboom/pivotcontentdemo

正如你所看到的,我從基類派生UserControls,因爲它們在語義上是相同的。但是,這絕不是必須的,從UserControl繼承就可以了。

我更喜歡這種方法,而不是將數據透視項本身提取到自定義控件中。

+0

Tnx是一個很好的例子! – klingu 2014-05-09 10:19:43

+0

@klingu不客氣! – 2014-05-09 10:54:16

相關問題