Windows Phone App中页面之间的全局范围对象

时间:2014-11-02 12:06:19

标签: c# windows-phone-8 windows-phone

我有两个名为" xxxManager"的静态类。我在" MainPage"开始时,他们会从内存中获取一些数据,以便在我的应用中显示,特别是进入列表。我创建它们作为静态类,因为我需要在我的应用程序的每个页面中的数据。所以我只是这样做:

xxxManager.GetDataByPageId(2).GetList()我可以使用它的所有值。

问题在于我不希望它们是静态的,因为我想创建一个抽象类并用来派生我的两个" Managers"。如果我这样做,我将需要创建这些类的构造函数,但每次进入另一个页面时我都不想做new,因为它会从内存中读取另一个时间数据

如何通过页面将对象放入我的所有应用程序的全局范围?

我想创建一个静态类(只是一个例子):

public static Definitions()
{
     xxxManager manager_;

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

这是一个好的解决方案,还是有更好的东西?

2 个答案:

答案 0 :(得分: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 :(得分: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以及需要在应用程序的任何位置访问的任何其他位。