2011-06-11 4 views
2

J'ai une application Silverlight composée de plusieurs pages utilisant Navigation Framework. Quel est l'endroit idéal pour stocker les données qui doivent être accessibles sur toutes les pages (XAML) et tout au long de la durée de vie de l'application.Silverlight: où stocker les données utilisées à travers les pages

EDIT: J'ai oublié de mentionner que je suis actuellement le faire comme une classe statique

+0

Je dirais un singleton –

+0

Vous pouvez utiliser des membres statiques sur une classe d'aide – Waleed

+0

@Wakeed C'est ce que je fais à présent. Pensé qu'il y aurait une meilleure méthode. – devnull

Répondre

1

membres statiques sont généralement une mauvaise idée. Vous n'avez aucun contrôle sur la durée de vie ou la capacité de substituer facilement un autre ensemble de données (et ne me lancez pas sur l'incapacité de faire des tests unitaires appropriés). Vous souhaitez utiliser un type de modèle de vue/de données partagé.

Si vous n'utilisez pas la totalité de la route PRISM (nous utilisons toujours PRISM maintenant pour Silverlight et WPF), ou Unity, ou même simplement MVVM, utilisez des accesseurs singleton simples sur votre objet de données.

Il y a beaucoup de discussions sur les meilleurs modèles pour C# singletons, mais vous pouvez apprendre beaucoup ici http://www.yoda.arachsys.com/csharp/singleton.html

Hope this helps.

+0

Quelle est la différence entre la classe singleton et la classe statique si je veux que les données soient persistantes tout au long de la durée de vie de l'application? – devnull

+0

@andromeda: Une classe singleton est beaucoup plus adaptable aux changements que les propriétés statiques individuelles. Vous pouvez plus facilement le rendre non statique pour les tests et vous pouvez contrôler quand il est créé (avec la variable statique, ils sont créés uniquement avant le démarrage de l'application). –

0

J'aime créer une classe appelée Session, avec une propriété statique comme celui-ci public static Session Default {get {return App.Current.Resources["Session"] as Session;}}, puis créer une nouvelle instance de celui-ci dans app.xaml comme ça <classes:Session x:Name="Session"/>, vous pouvez y accéder dans le code derrière avec Session.Default... et vous pouvez lier à elle avec Source liaison et ce sera toujours la même instance. J'ai développé ce modèle à un modèle plus complexe et flexible avec des classes de base, etc, mais cela devrait suffire à vos fins. J'ai écrit ce code dans cette fenêtre Web, il pourrait ne pas compiler, si vous avez besoin de plus d'aide laissez-moi savoir

Questions connexes