2010-06-30 4 views
1

Je n'arrive pas à trouver comment mettre en cache les pages déjà visitées dans mon application Silverlight. I ont un réseau de URIs déclarée comme ceci:Silverlight page de mise en cache

let pages : UriUserControl array = [| 
     new Module1.MyIdeas() :> UriUserControl ; 
     new Module1.Page2() :> UriUserControl ; 
     new Module1.Page3() :> UriUserControl ; 
     new Module1.Page4() :> UriUserControl ; 
     new Module1.Page5() :> UriUserControl ; |] 

j'ai un cadre de navigation sur la page et je gère la navigation comme tel (nav est l'objet de la monture sur la page de modèle):

member this.navigate (ea: SelectedMenuItemArgs) = 
     let i = ea.Index 
     if i <= pages.Length then   
      let page = (pages.[i-1] :> INamedUriProvider) 
      nav.Navigate(page.Uri) |> ignore 
      pageTitle.Text <- page.ProviderName 

Je cherche un moyen d'éviter de recréer la page sur les navigations ultérieures à l'URI. J'ai pensé garder une carte d'URI -> nav.Content mais nav.Content et placer le contenu de navs basé sur ce cache. Des idées?

Répondre

1

Mon message original était incomplet, j'ai oublié d'inclure ce UserControl UriUserControl hérité et l'élément racine pour chaque xaml était UserControl ie;

type UriUserControl(uriStr, name) as this = 
    inherit UserControl() 
    member this.uri = new System.Uri(uriStr, UriKind.Relative) 
    member this.providerName = name 
    interface INamedUriProvider with 
     member this.Uri with get() = this.uri 
     member this.ProviderName with get() = this.providerName 

je changé cette implémentation à utiliser System.Windows.Controls.Page au lieu de UserControl (changer aussi les années UserControl à la page est dans le XAML). Cela permet à l'image d'utiliser la fonctionnalité de mise en cache de NavigationService, qui non seulement vous permet de mettre en cache, mais active également les boutons de navigation avant et arrière de l'application.