为了分享我的Windows Phone 8应用程序页面之间的数据(数据配合物)我想实现一个单身,但我希望它是通用的,这可能吗? 我想,这对每种类型创建一个新的实例,不是吗?
public sealed class NavigationContextService<T>
{
private static readonly NavigationContextService<T> instance = new NavigationContextService<T>();
private NavigationContextService()
{
}
public static NavigationContextService<T> Instance
{
get
{
return instance;
}
}
public List<T> ShareList { get; set; }
public T ShareData { get; set; }
}
这对每个类型创建一个新的实例,因为它是通用的-你希望它是这样的(如果你开始使用泛型,看看一些教程,博客或MSDN -你会很容易在网上找到很多)。
这仍然是一个单例。 当您使用
NavigationContextService<string>.Instance.ShareList.Add("Text");
那么你有一个类实例string
。 泛型帮助,当你想创建在不同类型相同的方法/班很多。
在另一方面,如果你想创建辛格尔顿,将举行不同类型的,那么你可以例如修改类是非一般是这样的:
public sealed class NavigationContextServiceNonGeneric
{
private static readonly NavigationContextServiceNonGeneric instance = new NavigationContextServiceNonGeneric();
private NavigationContextServiceNonGeneric() { ShareList = new List<object>(); }
public static NavigationContextServiceNonGeneric Instance
{ get { return instance; } }
public List<object> ShareList { get; set; }
public object ShareData { get; set; }
}
正如你可以在代码中看到上述我还没有定义的“精确”类型的共享数据的-它是object
类型。 然后,你可以很容易地认为最有它的数据:
NavigationContextServiceNonGeneric.Instance.ShareList.Add("Text");
NavigationContextServiceNonGeneric.Instance.ShareList.Add(3);
NavigationContextServiceNonGeneric.Instance.ShareList.Add(3.0f);
它是单,能容纳不同类型的共享数据。 但它也disavantages -主要是,你要记住你持有什么类型的数据和以什么顺序。 在我看来通用的版本是因为这一事实更好。
一切都取决于你的代码的目的。 有可能会更容易,更好的方法,这些两种方法。
至于页面导航,比如,你可以尝试使用的方法从这篇文章 -您扩展导航服务传递的对象:
public static class Extensions
{
private static object Data;
public static void Navigate(this NavigationService navigationService, Uri source, object data)
{
Data = data;
navigationService.Navigate(source);
}
public static object GetNavigationData(this NavigationService service) { return Data; }
}
然后你使用它:
NavigationService.Navigate(yourUri, DataToPass);
导航后,你可以得到你的数据:
string myTextData = NavigationService.GetNavigationData() as string;
这种方法有缺点:它不是类型安全的,你的数据不会在墓碑模式被保留。
至于第二个缺点,你可以很容易地使用PhoneApplicationService.State属性的页面导航的目的-这是一本字典(这同时立碑保存):
PhoneApplicationService.Current.State.Add("data", yourData);
然后,当你希望得到您的数据:
yourDataType yourData = PhoneApplicationService.Current.State["data"] as yourDataType;
还有更多您可以在其中传递数据的方式。