NavigationService 抛出 NullReferenceException

2024-01-13

我正在尝试使用 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 实现导航?


我也在使用 MVVM Light。我有一个名为 PageConductor 的类,它基于 Microsoft 的 John Papa(Silverlight MVP)使用的类。这是我使用的 PageConductor 服务

public class PageConductor : IPageConductor
{
    protected Frame RootFrame { get; set; }

    public PageConductor()
    {
        Messenger.Default.Register<Messages.FrameMessage>(this, OnReceiveFrameMessage);
    }
    public void DisplayError(string origin, Exception e, string details)
    {
        string description = string.Format("Error occured in {0}. {1} {2}", origin, details, e.Message);
        var error = new Model.Error() { Description = description, Title = "Error Occurred" };
        Messenger.Default.Send(new Messages.ErrorMessage() { Error = error });
    }

    public void DisplayError(string origin, Exception e)
    {
        DisplayError(origin, e, string.Empty);
    }
    private void OnReceiveFrameMessage(Messages.FrameMessage msg)
    {
        RootFrame = msg.RootFrame;
    }
    private void Go(string path, string sender)
    {
        RootFrame.Navigate(new Uri(path, UriKind.Relative));
    }
    public void GoBack()
    {
        RootFrame.GoBack();
    }
}

在我的 MainPage.xaml.cs 构造函数中,我有这个,它在我的 PageConductor 服务中创建 ContentFrame 的实例:

Messenger.Default.Send(new Messages.FrameMessage() { RootFrame = ContentFrame });

然后,我使用依赖项注入将 PageConductor 服务的实例实例化到我的 MainPage ViewModel 中。这是我的 MainViewModel 类:

protected Services.IPageConductor PageConductor { get; set; }
    public RelayCommand<string> NavigateCommand { get; set; }

    public MainViewModel(Services.IPageConductor pageConductor)
    {

        PageConductor = pageConductor;
        RegisterCommands();
    }
    private void RegisterCommands()
    {
        NavigateCommand = new RelayCommand<string>(
            (source) => OnNavigate(source));

    }
    private void OnNavigate(string sender)
    {
        PageConductor.GoToView(sender, "main");
    }

请注意,我的 PageConductorService 实例作为 MainViewModel 构造函数方法中的参数。我通过 ViewModelLocator 传递此信息:

private readonly TSMVVM.Services.ServiceProviderBase _sp;
public ViewModelLocator()
{
    _sp = Services.ServiceProviderBase.Instance;
CreateMain(_sp);
}
        #region MainPageViewModel
    public static MainViewModel MainStatic
    {
        get
        {
            Services.ServiceProviderBase SP = Services.ServiceProviderBase.Instance;
            if (_main == null)
            {
                CreateMain(SP);
            }

            return _main;
        }
    }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance",
         "CA1822:MarkMembersAsStatic",
         Justification = "This non-static member is needed for data binding purposes.")]
    public MainViewModel Main
    {
        get
        {
            return MainStatic;
        }
    }

    public static void ClearMain()
    {
        _main.Cleanup();
        _main = null;
    }

    public static void CreateMain(Services.ServiceProviderBase SP)
    {
        if (_main == null)
        {
            _main = new MainViewModel(SP.PageConductor);
        }
    }
    #endregion

为了进一步参考,我的 Messages.FrameMessage 类很简单:

internal class FrameMessage
{
    public Frame RootFrame { get; set; }
}

我对前进/后退按钮没有任何问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NavigationService 抛出 NullReferenceException 的相关文章

  • 需要哈希表和数组列表

    我正在尝试在我的 Windows 7 Phone 应用程序中使用其他人的 C 类 这些类使用 Hashtable 类型的对象 有问题的文件有 using System Collections 在顶部 所以我假设这就是它想要的 Hashtab
  • 具有可绑定属性的自定义视图未在 Xamarin.Forms SAP 上正确绑定

    我有一个复选框 应该触发按钮的 IsEnabled 事件 但不知何故 应该执行的命令永远不会正确绑定并因此执行 这是 CheckBox xaml cs 控件 中的可绑定属性 public static readonly BindablePr
  • 如何使用 MVVM 更新 WPF 中编辑的数据? [复制]

    这个问题在这里已经有答案了 我正在为聊天应用程序构建 UI 设计 在尝试更新所选联系人的消息时遇到问题 选择现有联系人 选择编辑选项 然后编辑其属性 例如用户名和图像 后 唯一进行的更改是联系人的用户名和图像 我仍然想更改 MessageM
  • Windows Phone 自定义着色器错误?

    在 Windows Phone XNA 4 0 中 我在编译时收到以下错误 Windows Phone平台不支持自定义着色器 这真的很烦人 因为我有一个 Xbox 360 版本的项目 还有一个 Windows 版本的项目 我尝试使用基于编译
  • 重置 Windows Phone 照片上传

    我正在尝试使用 RestSharp 将照片上传到 Windows Phone 7 应用程序中的 REST api 进行获取 发布 post参数如下 photo 照片 编码为多部分 表单数据 照片 相册 id 现有相册的标识符 可以是一个事件
  • MVVM ViewModel 与 MVC ViewModel

    ViewModel 是一个在 MVVM Model View ViewModel 和 ASP NET MVC 的推荐实现中使用的术语 鉴于每种模式都使用相同的术语 研究 ViewModel 可能会令人困惑 MVC ViewModel 和 M
  • WPF中ViewModel是否应该继承DependencyObject?

    我尝试创建一个简单的UserControl在 WPF 中使用 MVVM 现在我需要为UserControl 所以我尝试在中创建依赖属性UserControlViewModel 我不想处于代码隐藏状态 为了创建依赖属性UserControlV
  • 如何使用 ViewModel 对 silverlight 数据网格实现自然(人类字母数字)排序?

    在使用数据网格的 silverlight 项目中 我使用一些定义 标签编号 的列 它是一个 Varchar 我想按照自然排序顺序对此列进行排序 如中所述 http www interact sw co uk iangblog 2007 12
  • 如何从 GestureListener.Gesture 触发 EventToCommand

    有人使用 Toolkit GestureListener 来触发 EventToCommand 吗 我认为您无法使用 EventToCommand 行为来做到这一点 但我创建了一种行为 允许通过将 GestureListener 绑定到命令
  • C# 的软件可视化

    你们中有人知道 C 中软件可视化或可视化代码导航的工具吗 我找到了很多工具 但由于某种原因它们都是针对 Java 的 维基百科中有一个列表 但没有一个是针对 Net 平台的 http en wikipedia org wiki Softwa
  • 如果 Window.SizeToContent = WidthAndHeight,则 Loaded 事件的 EventToCommand 无法按预期工作

    我发现EventToCommand对于 Loaded event 来说 如果Window SizeToContent属性设置为WidthAndHeight Loaded 事件似乎被正确触发 但是EventToCommand Command属
  • 检测Windows Phone 7上已显示屏幕键盘

    简单的问题 如何检测windows mobile 7上已经显示屏幕键盘 是否有我可以添加侦听器的事件 它占据了大约一半的屏幕 我想在它显示时向上滚动视图 EDIT 下面的评论更清楚地表明了我想要做什么 我有一个文本框输入 当用户在其中输入时
  • 将事件绑定到 ItemsControl 中的按钮

    我有一个 Windows Phone 7 应用程序 其中包含一些 xaml 如下所示
  • 简单的WPF + MVVM绑定

    我有一个名为MyWindow源自于Window 我使用 MVVM 模式 因此在代码隐藏中我有以下字段 public MyViewModel ViewModel new MyViewModel ViewModel包含一个集合Person 我想
  • 如何在 Flutter 的 widget 树中打开新的 MaterialPageRoute 作为子项

    在下面的示例中 当我推送新的 MaterialPageRoute 时 它 会在与 Flutter 小部件树中的 Home 小部件相同的级别上创建 我希望将它作为小部件 Home 的子部件 因此 Home 将是 Child 小部件的父部件 这
  • 以编程方式设置 Windows Phone 7 音量

    有没有办法以编程方式更改 Windows Phone 7 的声音设置 启用或禁用约会和所有其他通知的声音 还可以更改全局音量 即 铃声 没有 API 可以启用您提到的任务 您可以使用 XNA API 调整应用程序中声音的音量 但这只是当前可
  • 如何使用 C# 中的 Caliburn.Micro 从 ListView 获取选定的项目和事件?

    我使用 Caliburn Micro 库用 MVVM C 和 XAML 编写了一个程序 我怎样才能 get all选定的项目 不仅是一项 获取选定的更改事件 通过单击标题列对项目进行排序 任何帮助 将不胜感激 图形用户界面代码 视图 Mai
  • 现代 UI WPF 导航

    我正在使用现代 ui wpf 并尝试从 CheckLogin xaml 页面导航到 MainWindow xaml 页面 它们位于解决方案根目录中 我在 CheckLogin xaml 中写了这样的内容 BBCodeBlock bbBloc
  • 如何从 Windows Phone 7 模拟器获取数据

    我有一个 WP7 的单元测试框架 它在手机上运行 结果相当难以阅读 因此我将它们写入 XDocument 我的问题是 如何才能将这个 XML 文件从手机上移到我的桌面上 以便我可以实际分析结果 到目前为止 我所做的是将 Debugger B
  • 如何在 Windows Phone 7 Silverlight 应用程序中保存应用程序状态(变量值、按钮状态等)?

    如果用户按下后退按钮 或例如按下应用程序内的横幅 以在应用程序恢复时设置相同的设置 如何保存 Silverlight 应用程序的状态 Windows Phone 7中有没有类似注册表的东西 一些本地存储 我可以使用任何数据库来保存应用程序设

随机推荐

  • 了解 R 中的列表索引和括号约定

    我几乎了解 R 中的列表索引 但我有一些挥之不去的问题 具体来说 我试图了解使用多个索引来获取列表中的不同数据层 以及在每个数据类型的每个级别使用的括号类型 首先 我将展示一个简单的示例列表和我到目前为止的理解 Make an exampl
  • 向特定用户发送推送通知 - Laravel

    在我的 laravel 应用程序中 我想使用 Pusher 向特定用户发送通知 我将此代码放入我的方法中 pusher App make pusher pusher gt trigger notification channel notif
  • 从 HttpSessionListener 中获取用户名

    我想从内部获取用户名HttpSessionListener sessionCreated 当我说用户名时 我特指的是返回的名称HttpServletRequest getRemoteUser 显然 一定有一个HttpServletReque
  • System.Data.SqlTypes.SqlTypeException:SqlDateTime 溢出

    我正在使用 C net 和 SQL Server 2008 当尝试在我的项目中运行测试单元时 出现以下错误 System Data SqlTypes SqlTypeException SqlDateTime overflow Must be
  • 比较两个 CSV 并仅导出两者都不存在的名称列表

    我有 2 个带有用户名的 CSV 文件 我只想导出两个文件中都不存在的用户名 我现在的代码 file1 import csv Path C ps output adusers csv file2 import csv Path C ps o
  • HTML、jQuery:在图像映射区域显示文本

    我有一个像这样的图像映射 img src planets gif width 145 height 126 alt Planets
  • IIS Express——让 SSL 发挥作用

    我无法让 IIS Express 接受我正在开发的 VS2010 MVC3 项目的安全连接 我可以让它接受端口 80 上的不安全连接 但接受端口 443 上的不安全连接 根据谷歌搜索 我采取了以下步骤 1 通过在 VS2010 命令行上执行
  • 代码版本更改“规则”[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我知道关于软件版本控制没有固定的规则 但我有几个问题 1 如何正确升级版本 我有一个不久前开始使用的小软件 自从我从头开始以来 我从 0 1 版
  • Python:远程服务器宕机后自动重新连接ssh隧道

    我已经实现了一个在 Python 中建立 ssh 隧道的功能 因此我可以将数据插入 NAT 后面的数据库中 没有可用的端口转发 import paramiko from sshtunnel import SSHTunnelForwarder
  • Java 中的 Infiniband

    众所周知 OFED的Socket Direct协议是已弃用 http en wikipedia org wiki Sockets Direct ProtocolOFED 的 3 x 版本根本不附带 SDP 因此 Java 的SDP http
  • Apache Hive 中的时间戳是否与时区一起存储?

    以下讨论似乎表明 Hive 时间戳具有时区 https community hortonworks com questions 83523 timestamp in hive without timezone html https comm
  • 在 Mac 上使用 JBDC 对 SQL Server 进行 Windows 身份验证

    是否可以使用 Windows 身份验证 集成安全性从 Mac 连接到 SQL Server 我使用的是 Microsoft 提供的 type 4 JDBC 驱动程序 前端 表单应用程序 是用 Java 编码的 在 Windows 上一切都运
  • 如何将此代码从 PyQt4 转换为 PyQt5

    我是 PyGt 中的一名完全新手程序员 我已经读过有关 PyGt4 的书 但现在我们有了 PyGt5 我无法运行书中的示例 例如 这是本书中的第一个示例 最简单的 您可以看到 from PyQt5 import QtCore QtGui 但
  • 如何使实体字段类型在 silex 中可用?

    我一直在我的最新项目中使用 Silex 并且我试图遵循 如何使用表单事件动态修改表单 http symfony com doc 2 3 cookbook form dynamic form modification html cookboo
  • C#:在对象之间创建强引用,而无需一个对象引用另一个对象

    假设我有 2 个类 Foo 和 Bar Foo 与 Bar 没有 也不可能有 关系 但是 我希望 bar 实例保持活动状态 只要它的 foo 实例保持活动状态即可 有没有办法在 foo 不实际引用 bar 的情况下这样做 谢谢 科恩 看看条
  • 将图形原型 (pb/pbtxt) 转换为 SavedModel 以在 TensorFlow Serving 或 Cloud ML Engine 中使用

    我一直在关注TensorFlow 诗人 2 https codelabs developers google com codelabs tensorflow for poets 2我在我训练过的模型上进行了代码实验室 并创建了一个带有嵌入权
  • Spring JPA - 查找并排序[重复]

    这个问题在这里已经有答案了 我有一个竞赛实体 Entity Table name T CONTEST public class Contest rest of the attributes Column name START TIME pr
  • 停止在 PHP 中显示通知

    我希望我的通知停止以 PHP 形式显示 代码中没有错误 只是说诸如未定义索引之类的内容 对此我们无能为力 那么如何阻止它显示呢 Notice Undefined variable username in C wamp www watched
  • C++ 如何获取窗口大小(宽度和高度)?

    我正在尝试创建一个图表 我需要知道用户正在其中运行代码的窗口的大小 我正在尝试缩放数据 以便数据仅显示在窗口的大小上 而不进行换行或滚动 我使用的是 Windows 但我想使用类似于 Linux 的类似工具 int lines atoi g
  • NavigationService 抛出 NullReferenceException

    我正在尝试使用 MVVM Light 开发一个相当简单的 WP7 应用程序 我在使用导航服务时遇到了问题 我可以导航到某个页面 但按后退按钮后我无法再次导航到同一页面 NavigationService 抛出 NullReferenceEx