Надгробие WP7 — простая практика

У меня есть программа для чтения xml с привязкой к данным. MainPage подключен к DetailsPage: когда пользователь щелкает имя на главной странице, он получает сведения об этом имени (возраст, пол, дата рождения и т. д.) на DetailsPage.

У меня проблемы с надгробным памятником. Когда я нажимаю кнопку Windows, затем нажимаю кнопку «Назад», я попадаю на пустую страницу DetailsPage.

Каким будет самый простой способ решить эту проблему? Я пытался использовать TombstoneHelper, но он также показывает пустую страницу.

ДеталиPage.xaml

        <controls:PanoramaItem Header="" Margin="0,0,0,80">
            <ScrollViewer>
                <StackPanel>
                    <TextBlock TextWrapping="Wrap" Width="432" Style="{StaticResource PhoneTextExtraLargeStyle}" Margin="0,0,0,10" d:LayoutOverrides="Width" Foreground="#DEFFFFFF"><Run Text="Personal D"/><Run Text="e"/><Run Text="tails"/></TextBlock>
                    <StackPanel HorizontalAlignment="Left" Width="432" Orientation="Horizontal">
                        <TextBlock TextWrapping="Wrap" Margin="20,0,7,0" Foreground="#DEFFFFFF"><Run Text="Name"/><Run Text=":"/></TextBlock>
                        <TextBlock x:Name="username" TextWrapping="Wrap" Text="{Binding Name}" Foreground="#DEFFFFFF" />
                    </StackPanel>
                    <StackPanel HorizontalAlignment="Left" Width="432" Orientation="Horizontal">
                        <TextBlock TextWrapping="Wrap" Margin="20,0,7,0" Foreground="#DEFFFFFF"><Run Text="Age"/><Run Text=":"/></TextBlock>
                        <TextBlock x:Name="age" TextWrapping="Wrap" Text="{Binding Age}" Foreground="#DEFFFFFF"/>
                    </StackPanel>
                    <StackPanel HorizontalAlignment="Left" Width="432" Orientation="Horizontal">
                        <TextBlock TextWrapping="Wrap" Margin="20,0,7,0" Foreground="#DEFFFFFF"><Run Text="Nationality"/><Run Text=":"/></TextBlock>
                        <TextBlock x:Name="country" TextWrapping="Wrap" Text="{Binding Country}" Foreground="#DEFFFFFF"/>
                    </StackPanel>
                    <StackPanel HorizontalAlignment="Left" Width="432" Orientation="Horizontal">
                        <TextBlock TextWrapping="Wrap" Margin="20,0,7,0" Foreground="#DEFFFFFF"><Run Text="Country of Birth"/><Run Text=":"/></TextBlock>
                        <TextBlock x:Name="cobirth" TextWrapping="Wrap" Text="{Binding Cobirth}" Foreground="#DEFFFFFF"/>
                    </StackPanel>
                    <StackPanel HorizontalAlignment="Left" Width="432" Orientation="Horizontal">
                        <TextBlock TextWrapping="Wrap" Margin="20,0,7,0" Foreground="#DEFFFFFF"><Run Text="Place of Birth"/><Run Text=":"/></TextBlock>
                        <TextBlock x:Name="fobirth" TextWrapping="Wrap" Text="{Binding Pobirth}" Foreground="#DEFFFFFF"/>
                    </StackPanel>
                </StackPanel>
            </ScrollViewer>
        </controls:PanoramaItem>

ДеталиPage.cs

с помощью TombstoneHelper;

    public User()
    {
        InitializeComponent();
        SupportedOrientations = SupportedPageOrientation.Portrait;
    }
    protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
    {
        base.OnNavigatedFrom(e);

        this.SaveState();  // <- first line
    }

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

        this.RestoreState();  // <- second line
    }

Главная.Cs

    private void UserListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (e.AddedItems.Count > 0)
        {
            NavigationService.Navigate(new Uri("/DetailsPage.xaml", UriKind.Relative));

            FrameworkElement root = Application.Current.RootVisual as FrameworkElement;
            root.DataContext = (RosterItem)e.AddedItems[0];
            ((ListBox)sender).SelectedIndex = -1;

        }
    }

person FrankCap    schedule 16.07.2011    source источник


Ответы (1)


При прочих равных условиях помощник Tombstone должен просто работать. Помните, что вы должны назвать свои элементы управления (с атрибутом x:Name), чтобы помощник Tombstone мог получить к ним доступ. Также убедитесь, что вы вызываете SaveState() в методе NavigatedFrom() и RestoreState() в NavigatedTo() (а не наоборот).

Если это не так, что-то должно быть не так в вашем коде. Возможно, мы сможем помочь, если вы опубликуете соответствующие части своего кода.

person 1adam12    schedule 16.07.2011
comment
Я использую атрибут Name, но он все еще не работает. Я добавил ... From (e); this.SaveState (); ... ...Палец); this.RestoreState()... Коды только в DetailsPage, нужно ли добавлять их и в MainPage? Другая возможность проблемы; У меня есть детали в Scrollviewer, влияет ли это на результаты? - person FrankCap; 17.07.2011
comment
TombstoneHelper по умолчанию управляет только содержимым TextBox, PasswordBox, CheckBox, RadioButton, Slider, ListBox и ScrollViewer. Это не работает, потому что вы отображаете значения для TextBlocks, которые не обрабатываются TombstoneHelper автоматически. Вы можете либо изучить модель расширяемости TombstoneHelper, чтобы увидеть, как вы можете добавить поддержку TextBlocks, иначе вместо этого вы могли бы отображать свои данные в TextBox. - person 1adam12; 18.07.2011
comment
Эйден, я не знаю, как тебя отблагодарить :D. Теперь это работает. Большое тебе спасибо! - person FrankCap; 18.07.2011