2011-10-03 71 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

相關問題