Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从viewmodel导航到新页面_C#_Windows Phone 7_Mvvm - Fatal编程技术网

C# 从viewmodel导航到新页面

C# 从viewmodel导航到新页面,c#,windows-phone-7,mvvm,C#,Windows Phone 7,Mvvm,我的程序使用了WP7数据绑定应用程序模板,该模板使用了MVVM的形式。我想从我的主页导航到我的设置页面,但因为是VM加载数据,而VM又决定是否需要加载设置页面,所以我想从VM而不是视图调用导航代码。但是,NavigationService不在VM中显示Navigate方法,只在视图中显示。有人对我如何在VM中调用Navigate方法有什么建议吗 谢谢 杰森。我倾向于使用以下方法之一 在VM中发布事件,在视图中订阅 实现全局导航服务(使用ServiceLocator模式或DI),例如,您可以在应

我的程序使用了WP7数据绑定应用程序模板,该模板使用了MVVM的形式。我想从我的主页导航到我的设置页面,但因为是VM加载数据,而VM又决定是否需要加载设置页面,所以我想从VM而不是视图调用导航代码。但是,NavigationService不在VM中显示Navigate方法,只在视图中显示。有人对我如何在VM中调用Navigate方法有什么建议吗

谢谢


杰森。

我倾向于使用以下方法之一

  • 在VM中发布事件,在视图中订阅
  • 实现全局导航服务(使用ServiceLocator模式或DI),例如,您可以在应用程序类中实现这样的接口

在您的
App.xaml.cs
中将其作为静态方法实现,如下所示

public static void Navigate(Uri source)
{
    Dispatcher.BeginInvoke(() => (App.Current.RootVisual as PhoneApplicationFrame).Navigate(source));
}
这样你就可以在任何地方调用
App.Navigate(uri)

您可能还希望实现
GoBack()


您是否有任何有用的示例或资源来解释ServiceLocator模式?为什么要将其过度复杂化。如果您真的想要纯粹的分离,那么导航应该仍然是视图的任务。Claus,决定页面是否应该导航到的数据在VM中,加载数据的事件处理程序也在VM中,因此这似乎是执行导航的正确位置。我已经实现了您建议的事件,它工作得很好,但是,app.xaml.cs中的state方法似乎更有用,可以从VM跳转到V,而无需到处都是事件和处理程序。非常感谢您的解决方案。如果您将静态应用程序类视为定位器以及实现本身,那么这或多或少是一种ServiceLocator;)
public static void GoBack()
{
    Dispatcher.BeginInvoke(() => (App.Current.RootVisual as PhoneApplicationFrame).GoBack());
}