将PivotItem转换为Usercontrol以提高WP7中的加载性能

时间:2012-04-29 14:40:10

标签: c# windows-phone-7

我的MainPage.xaml是一个包含3个PivotItems的数据透视表页面。目前它正在为MainPage构造函数上的每个PivotItem加载所有必需的东西。这很糟糕,因为它加载了许多不必要的东西。

阅读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();
}
}

我应该使用create class PageXControl?它应该从主页类继承吗?

如何从每个PivotItem控件获取内容并转换为UserControls?

由于

2 个答案:

答案 0 :(得分:10)

将PivotItems的内容提取到UserControls实际上非常简单。首先,为每个PivotItem创建一个新的UserControl。然后将PivotItems的内容从PivotItem移动到UserControls。然后,按照指定的方法在OnLoadingPivotItem方法中创建控件。我在GitHub上创建了一个小项目,向您展示如何执行此操作。请参阅:https://github.com/ErikSchierboom/pivotcontentdemo

如您所见,我从基类派生UserControls,因为它们在语义上是相同的。但是,这绝不是必需的,只需继承UserControl即可。

我更喜欢这种方法,而不是将PivotItem本身提取到自定义控件中的方法。

答案 1 :(得分:6)

您可以创建自己的Pivot项目,这些项目将继承自PivotItem。我根据VS中的默认Pivot项目整理了一个示例,它将两个Pivot项目拆分为它们自己的类: -

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