2012-04-25 33 views
1

通過尤里斯導航是有點當你在設計Windows Phone的一個比較大的應用程序中的痛苦,所以我寫了這樣一個簡單的方法:包含在wp7 sl中的等價物?

void Navigate(string Frame) 
{ 
     NavigationService.Navigate(new Uri(string.Format("/{0}.xaml", 0), UriKind.Relative)); 
} 

的問題是,我想在所有這些代碼PhoneApplicationPages會做一些導航,但我想知道如果複製和粘貼是唯一的選擇,我通常會嘗試使我的頁面從具有基類的方法和dervives的類派生,但這將是由於PhoneApplicationPages是部分類別,所以另一個痛苦。有沒有其他更好的方法來實現這一目標,或者我應該複製並粘貼?

謝謝。

回答

2

你可以拉法伸到一個靜態類,然後通過調用頁面作爲參考;

public static class Navigator 
{ 
    public static void Navigate(Page page, string frame) 
    { 
     page.NavigationService.Navigate(new Uri(string.Format("/{0}.xaml", frame), UriKind.Relative)); 
    } 
} 

然後你只需要調用是這樣的:

Navigator.Navigate(this, "NewPage"); 
+0

啊,正是..我是這樣做的錯誤方式..謝謝。 – 2012-04-25 11:33:56

3

我沒有看到任何問題。

創建你的基礎PhonePage:

public class PhoneApplicationPageBase : PhoneApplicationPage 
    { 
     public void Navigate() 
     { 

     } 
     // Others methods 
    } 

在頁面源於此:

public partial class Page1 : PhoneApplicationPageBase 
    { 
     public Page1() 
     { 
      InitializeComponent(); 
     } 
    } 

,並在XAML中太:

<my:PhoneApplicationPageBase 
    x:Class="Views.Page1" 
    ...> 

</my:PhoneApplicationPageBase> 

以上。您可以創建擴展方法。

public static class Ext 
    { 
     public static void Navigate(this Page page, string view) 
     { 

     } 
    } 

然後使用this.Navigate("Page2.xaml"

+1

這樣做的問題是我也必須修改所有生成的'g.i.cs'來派生自我的自定義類。並且使用擴展方法也會導致我也爲所有與複製和粘貼相同的類no編寫擴展方法。沒有? – 2012-04-25 11:33:27

+0

否。擴展方法將適用於所有電話對象。 – 2012-04-25 15:20:49

+0

關於生成的g.i.cs ...您不需要自己修改,IDE就可以完成。 – 2012-04-25 15:22:08

2

我同意羅馬從基底頁面導出的過程是在最壞的情況乏味:一些字符串替換,就大功告成了。

我有我自己的小mvvm工具包,其中包含一個導航器服務(基本上)將uri映射到頁面類。在應用程序啓動時,將頁面類映射到uri,然後可以通過指定類簡單地導航到視圖(uri)。

即,在應用程序的構造函數註冊的觀點:

ViewNavigator.RegisterView<IMainView>(new Uri("/Pages/MainView.xaml", UriKind.RelativeOrAbsolute)); 

並從代碼,你可以通過使用

ViewNavigator.Instance.NavigateTo<IMainView>(); 

整個工具包是比這裏描述的(支持更先進的導航到一個頁面用於參數;包括允許您通過XAML進行相同操作的行爲),但是我希望您能夠了解一般想法。

+0

我真的不知道這段代碼的性能會有多好,但對我來說並不簡單。實例引用是靜態的嗎?什麼時候創建ViewNavigator?等... – 2012-04-25 11:39:05

+0

我不想進入細節,只是爲了展示這個想法。在這種情況下,ViewNavigator是一個單身人士。 「type-to-uri」解析是一種簡單的基於字典的操作,因此應該幾乎是即時的,並且在導航到新頁面的整個過程中,該操作的相對比例幾乎爲零。但更重要的是,我想展示一些關於如何擺脫代碼中的字符串常量的想法,並用更安全的方法替換它們。 – 2012-04-25 12:09:55