Prism 4:RequestNavigate() 不起作用

2024-02-05

我正在构建一个演示应用程序来学习 Prism 4 的导航功能。该应用程序有两个模块 - 每个模块都有三个视图:

  • 带有文本块的用户控件(“欢迎来到模块 A”)
  • RibbonTab(使用区域适配器),以及
  • Outlook 样式的任务按钮(如 Outlook 的邮件、日历等)

Shell 具有三个命名区域:“RibbonRegion”、“TaskButtonRegion”和“WorkspaceRegion”。视图加载到这些区域中。为了测试基本设置,我向 Prism Region Manager 注册了所有三个视图,以便它们在启动时加载,并且全部按预期工作。

接下来,我修改了设置,以便在启动时仅加载任务按钮。其他视图仅根据请求通过单击任务按钮加载。我的模块初始值设定项如下所示:

public void Initialize()
{
    /* We register the Task Button with the Prism Task Button Region because we want it
     * to be displayed immediately when the module is loaded, and for the lifetime of
     * the application. */

    // Register Task Button with Prism Region
    m_RegionManager.RegisterViewWithRegion("TaskButtonRegion", typeof(ModuleATaskButton));

    /* We register these objects with the Unity container because we don't want them
     * instantiated until we navigate to this module. */ 

    // Register View and Ribbon Tab as singletons with Unity container
    m_Container.RegisterType(typeof(ModuleAView), "ModuleAView", new ContainerControlledLifetimeManager());
    m_Container.RegisterType(typeof(ModuleARibbonTab), "ModuleARibbonTab", new ContainerControlledLifetimeManager());
}

当用户单击任务按钮时,它会调用一个 ICommand 对象,该对象调用IRegionManager.RequestNavigate()显示视图:

public void Execute(object parameter)
{
    // Initialize
    var regionManager = m_ViewModel.RegionManager;

    // Show Ribbon Tab
    var moduleARibbonTab = new Uri("ModuleARibbonTab", UriKind.Relative);
    regionManager.RequestNavigate("RibbonRegion", moduleARibbonTab);

    // Show View
    var moduleAView = new Uri("ModuleAView", UriKind.Relative);
    regionManager.RequestNavigate("WorkspaceRegion", moduleAView);
}

单击任务按钮时将调用该命令,但我得到的是:

UserControl 显然是作为System.Object,我怀疑 RibbonTab 正在加载相同的内容。我认为问题出在我的身上RequestNavigate()致电,或者我在 Unity 中注册。但我无法识别问题所在。

任何人都可以阐明正在发生的事情吗?感谢您的帮助。


终于弄清楚了这一点。答案就在Microsoft Prism 开发人员指南(第 4 版),第 120-121 页。它有两个部分:

首先,UserControl and RibbonTab对象从 Unity 解析为System.Object类型。这是 Unity 的限制以及我用来注册视图对象的重载。为了让它们解析为正确的类型,您需要使用不同的重载IUnityContainer.RegisterType():

// Register other view objects with DI Container (Unity)
m_Container.RegisterType<Object, ModuleAView>("ModuleAView");
m_Container.RegisterType<Object, ModuleARibbonTab>("ModuleARibbonTab");

此重载映射 Unity 的本机System.Object解析为所请求视图的正确类型。请参阅第 14 页的注释。 120 个开发者指南.

第二个问题在我的问题中没有明确说明,但在我解决第一个问题时发生了。我想要每个模块的RibbonTab当我切换到其他模块时将其删除。因为我的功能区就像一个ItemsControl, both RibbonTabs最终被展示——模块ARibbonTab当我切换到模块 B 时没有卸载。为了解决这个问题,我实现了IRegionMemberLifetime on the RibbonTab类。该问题已在第 14 页中介绍。 121 的开发者指南.

顺便说一句,我实施了IRegionMemberLifetime视图对象上的接口,而不是视图模型上的接口,因为接口不会影响应用程序的后端,只会影响视图对象。

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

Prism 4:RequestNavigate() 不起作用 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 如何升级django?

    我的项目在 Django 1 5 4 上运行 我想升级它 我做到了pip install U I django现在pip freeze显示 Django 1 6 5 显然 django 已升级 我在virtualenv 但我的项目仍在使用
  • bootstrap-selectpicker 不改变框宽度

    我正在尝试更改显示所选选项的选择器框的宽度 但无论我尝试什么 我都无法更改它 也无法更改框的颜色 任何想法或建议表示赞赏 我假设应该更改框宽度的代码片段如下 如您所见 我将其一直设置为 25 但宽度仍然很宽 selectpicker wid
  • 如果窗口未激活则获取输入 (Windows)

    简洁版本 当窗口未激活时 如何在使用 C C 的 Windows 中接收输入消息 背景资料 我目前正在开发一个不应该依赖于任何窗口的输入系统 因此它可以例如也可以在控制台中使用 我的想法是创建一个仅接收消息的不可见窗口 这可以使用 HWND
  • 在 Go 1.18 中 strings.Title() 已被弃用。现在该用什么?如何?

    按照建议here https www thesaurus com e grammar when to capitalize words 人名应该大写 例如John William Smith 我正在用 Golang 编写一个小软件 它从用户
  • 在另一个文件中查找一个文件的内容

    我使用以下 shell 脚本将一个文件的内容查找到另一个文件中 bin ksh file home nimish contents txt while read r line do grep line home nimish another
  • 从领域模型通信回应用层

    我有一个带有价格列表的域模型产品 public class Product private List
  • 派生类型的自动静态调用

    有谁知道如何使派生类自动实例化具有模板类型的静态变量 这要么不需要派生类的编写者提供任何内容 要么强制他调用此静态方法以使派生类定义有效的 这可能是无法理解的 我会尝试更好地定义它 基本上我有一个全局工厂类 带有一个名为 registerT
  • 在 JQuery 中输入时将 INPUT 附加到 TEXTAREA

    我有一个输入文本框 当有人在 INPUT 文本框中键入内容时 我需要它附加 添加到 TEXTAREA 值 假设用户在文本框中输入 12345 文本区域 默认值 评论 将自动添加 评论 12345 在他们键入时添加 12345 假设area是
  • animate.css 在 Chrome 最新版本(73 以上版本)中不起作用

    https daneden github io animate css https daneden github io animate css 这是 animate css 的链接 它在我的浏览器 Chrome Firefox 等 上没有显
  • 使用 gettext 的动态消息 (AngularJS)

    我有一个带有 Django 后端和 AngularJS 前端的应用程序 我用角度 gettext 插件 https github com rubenv angular gettext 与 Grunt 一起处理翻译 问题是 我有时通过 API
  • MySQL - 除了一个条目之外按字母顺序排序?

    我必须使用 MySQL 对类别列表进行排序 因为我使用的 CMS 只允许这样做 有没有一种方法可以按字母顺序排序 但在列表末尾返回一个条目 其他 ORDER BY ColumnName Other ColumnName
  • 我可以在 SQL Server Management Studio 中对 nvarchar 列类型使用“/”运算符吗? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我试图划分两列 其定义为nvarchar 但是 SSMS 会抛出错误 表示您无法使用 操作员开启nvarchar select locati
  • JavaScript 动画

    我正在尝试制作动画div moving 200px在 JavaScript 中水平排列 下面的代码让它跳跃像素 但是有没有办法让它看起来动画而不使用 jQuery function var div document getElementBy
  • C++ 中具有多态性的静态方法

    我在使用多态性时遇到了一个奇怪的问题 我有一个实现静态方法的基类 由于各种原因 该方法必须是静态的 基类还有一个纯虚方法run 由所有扩展类实现 我需要能够打电话run 来自静态类 当然 问题是静态类没有 this 指针 该方法可以传入一个
  • PyDev Eclipse 项目中没有 JavaScript 自动完成

    我有带有 PyDev 和 JavaScript 开发工具 JSDT 的 Eclipse 我正在使用这个环境来开发 Web 应用程序 Python HTML 和 CSS 编辑器都工作正常 突出显示和自动完成工作正常 JavaScript 突出
  • 在 fnDraw() 上保持分页状态

    我在用jquery我的应用程序中的数据表 我的方法有问题pagination 当我使用时它正在重置this table dataTable fnDraw 我的数据表每 5 秒调用一次fnDraw 更新表时 什么时候this table da
  • PHP 使用的 OS X 和 OpenSSL 上的 Composer 错误

    我删除了旧的 Xampp 本地服务器并安装了它包含的最新服务器 Apache 2 4 18 Unix OpenSSL 1 0 2e PHP 7 0 1 mod perl 2 0 8 dev Perl v5 16 3 但是当我尝试通过以下方式
  • OpenShift:无法使用 cron python 脚本连接到 MySQL 数据库

    我正在 OpenShift 上设置一个应用程序 它需要一个 Python 脚本每小时运行一次 并将数据从在线服务器提取到 OpenShift 上的 MySQL 数据库中 我通过在计算机上本地运行 Python 脚本并使用端口转发技术来填充该
  • 从 swift osx 应用程序发送电子邮件

    我在从 osx swift 应用程序发送邮件时遇到问题 为了发送邮件 我使用了下面的代码 import Foundation import Cocoa class sendemail NSObject NSSharingServiceDel
  • Prism 4:RequestNavigate() 不起作用

    我正在构建一个演示应用程序来学习 Prism 4 的导航功能 该应用程序有两个模块 每个模块都有三个视图 带有文本块的用户控件 欢迎来到模块 A RibbonTab 使用区域适配器 以及 Outlook 样式的任务按钮 如 Outlook