2011-10-03 73 views
0
public class Navigator : PhoneApplicationPage 
{ 
    private static Navigator _instance; 
    private static object _lock = new object(); 

    public static Navigator Instance 
    { 
     get 
     { 
      lock (_lock) 
      { 
       if (_instance == null) 
       { 
        _instance = new Navigator(); 
       } 
       return _instance; 
      } 
     } 
     private set 
     { 
      lock (_lock) 
      { 
       _instance = value; 
      } 
     } 
    } 

    private Navigator(){} 

    public bool NavigateTo(string uri) 
    { 
     lock (_lock) 
     { 
      return NavigationService.Navigate(new Uri(uri, UriKind.Relative)); 
     } 
    } 
} 

这就是所谓的一个ViewModel类:为什么不能工作(在Singleton上的NavigationService)?

Navigator.Instance.NavigateTo("/NotePage.xaml"); 

所以我有这个,和NavigationService.Navigate(..)抛出一个NullReferenceException。

我该如何解决这个问题/什么是替代方案?我想从ViewModel类使用NavigationService。

我宁愿一个解决方案,而不需要安装更多的组件(MVVM灯)。如果这是绝对不可能的,我会查看Messenger/Message类。

编辑 我几乎放弃了。我通过创建超链接按钮的样式来解决我的问题,该按钮可以环绕所有东西。

+0

例如,您似乎缺少私人构造函数(隐藏建设的替代方法)。你能提供更多的代码吗? –

+1

NavigationService.Navigate(..)方法不使用该实例吗?什么是导航服务与Navigator类的关系? –

+0

我添加了一个私人构造函数,这是完整的代码。我如何创建关系?我认为成为一个PhoneApplicationPage就足够了。 – SBoss

回答

0

你的单身不是线程安全的。看看这个实现:

http://www.yoda.arachsys.com/csharp/singleton.html

+1

作为您的评论是真实的,它既不回答这个问题,也不会在这个特殊情况下成为问题 - 只看其他评论 – Carsten

+1

我不知道这是否是他的情况下的问题,但如果我看到这样一个单身我会修复无论如何。我认为它是一种代码气味;-) – NickD

+6

是的,我看到你的*答案*作为评论... – Carsten

相关问题