Windows Phone - 访问DataContext最多需要4秒

时间:2011-01-05 16:35:10

标签: windows-phone-7 datacontext

我目前正在为Windows手机创建一个应用程序。 那么在“主页”上你几乎没有对你的概述 “字符”。

所有字符都存储在Singleton配置类中。

要生成概述,我只需使用带有Datatemplate的ListBox,如下所示:

<ListBox x:Name="ListBox_Characters" Margin="0,0,-12,0"  ItemsSource="{Binding Source={StaticResource Config},Path=Instance.Characters}">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <Button Style="{StaticResource CharacterButton}" Click="Button_Click_2">
        <StackPanel Orientation="Horizontal" Margin="0,0,0,17">
          <Image Source="{Binding ShowPortrait}" Height="110" Width="110" Margin="0,15,0,0" />
          <StackPanel Width="311">
            <TextBlock Text="{Binding Name}" TextWrapping="NoWrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
            <TextBlock Text="{Binding ShowCurrentlyTraining}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
            <ProgressBar Value="{Binding CurrentlyTrainingPercentage}" IsIndeterminate="{Binding CurrentlyUpdating}" />
            <Grid>
              <TextBlock Text="{Binding ShowSPs}" TextWrapping="Wrap" HorizontalAlignment="Left" Margin="12,0,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
              <TextBlock Grid.Column="2" Text="{Binding ShowCurrentlyTrainingPercentage}" HorizontalAlignment="Right" TextWrapping="Wrap" Margin="12,0,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
            </Grid>
            <TextBlock Text="{Binding ShowWealth}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
          </StackPanel>
        </StackPanel>
      </Button>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

现在我添加了一个页面,以显示更多细节。通过单击上面列表框中的一个字符,可以访问该页面。

要知道“what”字符被选中,我试图将characterID简单地存储在Singleton类中,然后从Detail页面加载适当的字符。

不幸的是,我不明白这一点: 这是“点击”方法,已经添加了时间测量。 消息框最后告诉我:“点击方法需要3.896”

private void Button_Click_2(object sender, RoutedEventArgs e)
        {
            //stop the update timer
            Configuration.Instance.updater.Stop();

            //Get current character id
            DateTime start = DateTime.Now; //time measurement

            Button btn = (Button)sender;
            Character myChar = (Character)btn.DataContext;
            Configuration.Instance.CharacterToReload = myChar.CharacterID;

            TimeSpan ts = DateTime.Now.Subtract(start); //time measurement
            MessageBox.Show("Clicking method takes " + ts.TotalSeconds); //time measurement

            //Navigate to Detail Page
            NavigationService.Navigate(new Uri("/Details.xaml", UriKind.Relative));
        }

这些简单的“演员表”如何最多需要3秒钟? 我错过了什么吗?

最好的问候, dognose

编辑:为什么我总是工作几个小时没有成功 - 然后,在电路板上创建一个帖子之后,我想出来了?

我在属性“CharacterToReload”的“set”部分添加了IsolatedStore的保存方法 - 大约需要4秒钟(大量数据/图片)

1 个答案:

答案 0 :(得分:0)

我的猜测是,Configuration.CharacterToReload的setter是时间。

我建议您在导航Uri中将CharacterId设置为查询参数 - 如果用户在导航到详细信息页面时将其关闭,这将有助于重新保护您的应用。

在详细信息页面的“导航覆盖”中,从“导航”上下文中获取查询参数以设置详细信息页面数据上下文。

var uriString = string.Format("/DetailPage.xaml?character={0}", characterId);
NavigationService.Navigate(new Uri(uriString, UriKind.Relative));

<强> DetailPage

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    string characterId;

    if (NavigationContext.QueryString.TryGetValue("character", out characterId))
    {
        int index = 0;

        if (int.TryParse(charaterId, out index))
        {
           // set data context of detail page.
        }
    }
}