首先,在 WP8 中没有这样的东西,所以你需要一个解决方法。解决方法可能不同,链接的问题(和答案)是潜在的方法之一。我个人这样做有点不同。我将在这里描述我当前项目的架构,尽管它可能不适用于您的情况,因为我的应用程序很大并且结构复杂。但我将尝试解释如何将其应用于您的情况。
特别是,我当前的应用程序包含所谓的服务(只是我的名字,不是标准的)。它们具有不同的范围(有些被 1 页使用,有些是应用程序的全局)、不同的生命周期等等。本质上,每个服务都是一个实现定义良好的接口的类,以便其他服务可以使用它。
接下来,服务可以相互依赖。我正在使用 Ninject 框架进行依赖注入。本质上,如果服务 A 依赖于服务 B,它会导致如下代码:
public class B : IB
{
...
}
public class A
{
IB b;
public A(IB b)
{
this.b = b;
}
}
其中 IB 是服务 B 实现的接口。
然后我有视图模型(是的,我正在使用 MVVM,如果你想构建一个相当大的 WP8 应用程序,你可能也应该这样做)。视图模型使用服务来执行应用程序功能。一些服务被多个视图模型使用。例如,我有一项服务从 Web 获取一些数据,并通过定期轮询使其保持最新状态。该 Web 数据在应用程序的多个页面中使用,因此应该在不同的视图模型之间共享。再次通过依赖注入实现,让所有感兴趣的视图模型都接受这个服务实例作为构造函数参数。
public class MainPageViewModel : INotifyPropertChanged
{
private string webData;
public MainPageViewModel(IWebDataService service)
{
webData = service.CurrentWebData;
service.WebDataChanged += (o, e) => webData = service.CurrentWebData;
}
...
}
public class DetailPageViewModel : INotifyPropertChanged
{
private string webData;
public DetailPageViewModel(IWebDataService service)
{
webData = service.CurrentWebData;
service.WebDataChanged += (o, e) => webData = service.CurrentWebData;
}
...
}
public class WebDataService : IWebDataService
{
public string CurrentWebData;
public event EventHandler WebDataUpdated;
...
}
Ninject 允许我实例化 IWebDataService 的单个实例,以便主页面和详细信息页面共享它的同一个实例。当 web 数据更新时,会触发一个事件,以便两个视图模型都可以更新它们的 web 数据实例,并将这些新数据推送到视图。
所以这就是我的做法。您可能会重用此架构的某些部分,例如让不同页面可访问某个类的单例实例。一个页面将一些新数据放入该单例实例,并且当数据更新时(事件触发或在构造过程中,如果垃圾收集器有足够的时间来杀死现有页面和/或视图模型实例),另一个页面读取更新的数据。他们就是这样分享的。
如果您希望我更深入地了解某些主题的详细信息,请随时在评论中提问。Windows Phone 非常欢迎 Android 开发人员。:)