Windows Phone - доступ к DataContext занимает до 4 секунд - PullRequest
1 голос
/ 05 января 2011

Я сейчас создаю приложение для Windows Phone. Ну, на «главной странице» у вас будет только обзор вашего "Символы".

Все ваши персонажи хранятся в классе конфигурации Singleton.

Для генерации обзора я просто использую 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>

Теперь я добавил страницу, чтобы показать больше деталей. Страница должна быть доступна, нажав один из символов в ListBox выше.

Чтобы узнать, «какой» символ выбран, я попытался просто сохранить символьный идентификатор в классе Singleton, а затем загрузить соответствующий символ со страницы сведений.

к сожалению, я не понимаю: Это метод «Click», с уже добавленным измерением времени. Окно сообщения наконец говорит мне: «Нажатие на метод занимает 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

edit: Почему я всегда работаю несколько часов безуспешно - а потом, сразу после создания поста в форумах, я понял это?

Я добавил метод сохранения для IsolatedStore в части «set» свойства «CharacterToReload» - это занимает около 4 секунд (много данных / изображений)

1 Ответ

0 голосов
/ 05 января 2011

Я предполагаю, что установщик для Configuration.CharacterToReload находится там, где берется время.

Я бы предложил установить CharacterId в качестве параметра запроса в Uri навигации - это облегчит повторную настройку.гидратация вашего приложения, если пользователь закрывает его при переходе на страницу сведений.

В переопределении Navigated на странице сведений получите параметр запроса из контекста навигации, чтобы установить контекст данных страницы сведений.

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.
        }
    }
}
...