Remember and navigate through multiple sets of state for a single page instance : Page « Windows Presentation Foundation « C# / C Sharp

Home
C# / C Sharp
1.2D Graphics
2.Class Interface
3.Collections Data Structure
4.Components
5.Data Types
6.Database ADO.net
7.Date Time
8.Design Patterns
9.Development Class
10.Event
11.File Stream
12.Generics
13.GUI Windows Form
14.Internationalization I18N
15.Language Basics
16.LINQ
17.Network
18.Office
19.Reflection
20.Regular Expressions
21.Security
22.Services Event
23.Thread
24.Web Services
25.Windows
26.Windows Presentation Foundation
27.XML
28.XML LINQ
C# / C Sharp » Windows Presentation Foundation » Page 




Remember and navigate through multiple sets of state for a single page instance
Remember and navigate through multiple sets of state for a single page instance
  

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="CustomContentStateNavigationSample.StateNavigationPage" 
  xmlns:ns="clr-namespace:CustomContentStateNavigationSample">
  <DockPanel>
    <DockPanel.Resources>
      <ObjectDataProvider x:Key="usersDataSource" ObjectType="{x:Type ns:Users}"/>
      <DataTemplate x:Key="NameTemplate">
        <TextBlock Text="{Binding Path=Name}"/>
      </DataTemplate>
    </DockPanel.Resources>
    <Button Name="removeBackEntryButton" DockPanel.Dock="Top" Click="removeBackEntryButton_Click" Height="25">Remove Back Entry</Button>
    <ListBox Name="userListBox" DockPanel.Dock="Top" Height="150" SelectionChanged="userListBox_SelectionChanged" DataContext="{StaticResource usersDataSource}" ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True" ItemTemplate="{StaticResource NameTemplate}" />
    <ListBox Name="logListBox" ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.VerticalScrollBarVisibility="Visible"></ListBox>
  </DockPanel>
</Page>

//File:Window.xaml.cs
using System;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using System.Collections.Generic;
using System.Text;

namespace CustomContentStateNavigationSample
{
    public partial class StateNavigationPage : Page, IProvideCustomContentState
    {
        void removeBackEntryButton_Click(object sender, RoutedEventArgs e)
        {
            if (this.NavigationService.CanGoBack)
            {
                JournalEntry entry = this.NavigationService.RemoveBackEntry();
                UserCustomContentState state = (UserCustomContentState)entry.CustomContentState;
                this.logListBox.Items.Insert(0"RemoveBackEntry: " + state.JournalEntryName);
            }
        }

        internal void userListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ife.RemovedItems.Count == return;

            User previousUser = e.RemovedItems[0as User;
            this.logListBox.Items.Insert(0"AddBackEntry: " + previousUser.Name);

            UserCustomContentState userPageState = new UserCustomContentState(previousUser);
            this.NavigationService.AddBackEntry(userPageState);
        }

        CustomContentState IProvideCustomContentState.GetContentState()
        {
            User currentUser = this.userListBox.SelectedItem as User;
            this.logListBox.Items.Insert(0"GetContentState: " + currentUser.Name);
            return new UserCustomContentState(currentUser);
        }
    }

    public class User
    {
        private string name;
        public User() { }
        public User(string name)
        {
            this.name = name;
        }
        public string Name
        {
            get return name; }
            set name = value; }
        }
    }
    [Serializable]
    class UserCustomContentState : CustomContentState
    {
        private User user;

        public UserCustomContentState(User user)
        {
            this.user = user;
        }

        public override string JournalEntryName
        {
            get
            {
                return this.user.Name;
            }
        }

        public override void Replay(NavigationService navigationService, NavigationMode mode)
        {
            StateNavigationPage page = (StateNavigationPage)navigationService.Content;
            ListBox userListBox = page.userListBox;

            page.userListBox.SelectionChanged -= page.userListBox_SelectionChanged;
            page.userListBox.SelectedItem = this.user;
            page.userListBox.SelectionChanged += page.userListBox_SelectionChanged;
        }
    }

    public class Users : ObservableCollection<User>
    {
        public Users()
        {
            this.Add(new User("A"));
            this.Add(new User("B"));
            this.Add(new User("C"));
            this.Add(new User("D"));
            this.Add(new User("E"));
            this.Add(new User("F"));
            this.Add(new User("G"));
        }
    }
}

   
    
  














Related examples in the same category
1.Page Loaded eventPage Loaded event
2.Navigate to an instance of a custom class, instead of a Page.Navigate to an instance of a custom class, instead of a Page.
3.Create a button when the page loads.Create a button when the page loads.
4.UI With Page for Dynamic Button contentUI With Page for Dynamic Button content
5.A XAML browser application (XBAP) running in partial trust can safely upload files from a client machine.A XAML browser application (XBAP) running in partial trust can safely upload files from a client machine.
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.