NavigationService 抛出 NullReferenceException
我正在尝试使用 MVVM Light 开发一个相当简单的 WP7 应用程序。我在使用导航服务时遇到了问题。我可以导航到某个页面,但按后退按钮后我无法再次导航到同一页面。 NavigationService 抛出 NullReferenceException。
我已经使用 GalaSoft.MvvmLight.Messaging 命名空间中的消息传递实现了导航。我的所有视图都继承自自定义的 PhoneApplicationPage 基类,该基类在“NavigationRequest”上注册侦听器:
public class PhoneApplicationPage : Microsoft.Phone.Controls.PhoneApplicationPage
{
public PhoneApplicationPage() : base()
{
Messenger.Default.Register<Uri>(this, "NavigationRequest", (uri) => NavigationService.Navigate(uri));
}
}
从我的视图模型中,我将 Uri 发布到此侦听器:
SendNavigationRequestMessage(new Uri("/View/AppSettingsView.xaml", UriKind.Relative));
就像我所说的,除了按“后退”按钮后导航时之外,这都有效。 这是为什么?我该如何解决?
有没有更好的方法使用 MVVM Light 实现导航?
Using MVVM Light, I'm trying to develop a rather simple WP7 application. I've run into a problem using the navigation service. I can navigate to a page, but after pressing the back button I can't navigate to the same page again. NavigationService throws a NullReferenceException.
I have implemented my navigation using Messaging from the GalaSoft.MvvmLight.Messaging namespace. All my views inherits from a customized PhoneApplicationPage base class that registrers a listener on "NavigationRequest":
public class PhoneApplicationPage : Microsoft.Phone.Controls.PhoneApplicationPage
{
public PhoneApplicationPage() : base()
{
Messenger.Default.Register<Uri>(this, "NavigationRequest", (uri) => NavigationService.Navigate(uri));
}
}
From my view models I post Uri's to this listener:
SendNavigationRequestMessage(new Uri("/View/AppSettingsView.xaml", UriKind.Relative));
Like i said, this works except when navigating after pressing the Back button.
Why is this and how can I solve it?
Is there a better way to implement navigation using MVVM Light?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我也在使用 MVVM Light。我有一个名为 PageConductor 的类,它基于 Microsoft 的 John Papa(Silverlight MVP)使用的类。这是我使用的 PageConductor 服务
在我的 MainPage.xaml.cs 构造函数中,我有这个,它在我的 PageConductor 服务中创建我的 ContentFrame 的实例。:
然后,我使用依赖项注入将我的 PageConductor 服务的实例实例化到我的 MainPage ViewModel 中。这是我的 MainViewModel 类:
请注意,我的 PageConductorService 实例作为 MainViewModel 构造函数方法中的参数。我通过 ViewModelLocator 传递此信息:
为了进一步参考,我的 Messages.FrameMessage 类很简单:
我对前进/后退按钮没有任何问题。
I'm using MVVM Light as well. I have a class called PageConductor, which is based on what John Papa (Silverlight MVP) from Microsoft uses. Here's the PageConductor Service I use
In my MainPage.xaml.cs constructor, I have this, which creates an instance of my ContentFrame in my PageConductor service.:
I then use dependency injection to instantiate an instance of my PageConductor Service into my MainPage ViewModel. Here is my MainViewModel class:
Notice the instance of my PageConductorService as a parameter in my MainViewModel constructor method. I pass this in via my ViewModelLocator:
For further reference, my Messages.FrameMessage class is simply:
I've had no issues with forward/back buttons.