当你在Windows Phone中设计一个相对较大的应用程序时,通过Uris导航有点痛苦,所以我写了一个简单的方法,如下所示:
void Navigate(string Frame)
{
NavigationService.Navigate(new Uri(string.Format("/{0}.xaml", 0), UriKind.Relative));
}
问题是,我想将所有代码包含在将执行一些导航的PhoneApplicationPages中,但是我想知道复制和粘贴是否是唯一的选择,我通常会尝试使我的页面派生自具有该方法的类并从基类派生,但这将是另一个痛苦,因为PhoneApplicationPages
是部分类。还有其他更好的方法来实现这一目标,或者我应该复制和粘贴吗?
谢谢。
我没有看到任何问题。
创建您的基本电话页面:
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"
)
您可以将方法拉出到静态类中,然后将调用页作为引用传递;
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");
我同意 Roman 的观点,即从基本页面派生的过程在最坏的情况下是乏味的:一些字符串替换,你就完成了。
我有自己的小 mvvm 工具包,其中包括一个导航器服务,该服务(基本上)将 uri 映射到页面类。在应用程序启动时,您将页面类映射到 uri,然后您可以通过指定类简单地导航到视图 (uri)。
即,在应用程序构造函数中注册视图:
ViewNavigator.RegisterView<IMainView>(new Uri("/Pages/MainView.xaml", UriKind.RelativeOrAbsolute));
从代码中,您可以使用
ViewNavigator.Instance.NavigateTo<IMainView>();
整个工具包比此处描述的更高级(支持参数;包括允许您通过 XAML 实现相同操作的行为),但我希望您了解大致概念。