2014-11-02 3 views
0

У меня есть два статических класса, называемых «xxxManager». Я инициализирую их, когда запускается «MainPage», они берут из памяти некоторые данные, которые будут представлены в моем приложении, в частности, входят в список. Я создал их как статические классы, потому что мне нужны их данные на каждой странице моего приложения. Поэтому я просто делаю:Глобальный объект области между страницами в Windows Phone App

xxxManager.GetDataByPageId(2).GetList() и могу использовать все его значения.

Проблема в том, что я не хочу, чтобы они были статичными, потому что я хочу создать абстрактный класс и использовать для вывода двух «менеджеров». Если я это сделаю, мне нужно будет создать конструктор этих классов, но я не хочу делать new каждый раз, когда я перехожу на другую страницу, потому что он будет читать в другой раз из памяти все данные.

Как я могу поместить объект в глобальную область всего моего приложения через страницы?

Я думал создать статический класс (просто пример):

public static Definitions() 
{ 
    xxxManager manager_; 

    public void Initialize() 
    { 
      xxxManager manager_ = new xxxManager(); 
    } 
} 

Это хорошее решение, или есть что-то лучше?

+0

Если вы «менеджеры» не слишком сложны, вы можете просто использовать IsolatedStorageSettings.ApplicationSettings для хранения/извлечения их с одной страницы на другую. –

ответ

2

Насколько я понимаю, вам нужна реализация одноэлементного шаблона.

public class XxxManager 
{ 
    private static Lazy<XxxManager> lazyInstance = new Lazy<XxxManager>(() => new XxxManager()); 

    private XxxManager() 
    { 
    } 

    public static XxxManager Instance 
    { 
     get 
     { 
      return lazyInstance.Instance; 
     } 
    } 
} 

Оттуда вы можете получить ваш менеджер в любом из кода по телефону XxxManager.Instance. Конструктор класса устанавливается в private, чтобы убедиться, что он никогда не создается вручную.

1

Я обычно создаю статическое свойство в моем App.xaml.cs

public static ViewModels.ViewModelBase ViewModel { get; set; } 

Инициализировать его в OnLaunched случае в том же файле. Таким образом, он доступен с использованием App.PropertyName в любом месте приложения.

protected override void OnLaunched(LaunchActivatedEventArgs e) 
{ 
    // other code 
    ViewModel = new MainViewModel(); 
    // other code 
} 

Для меня, это прекрасно работает с ViewModels и NavigationHelpers и любые другие биты, которые должны быть доступны в любом месте приложения.

Смежные вопросы