- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在构建一个演示应用程序来学习 Prism 4 的导航功能。该应用程序有两个模块——每个模块有三个 View :
Shell 具有三个命名区域:“RibbonRegion”、“TaskButtonRegion”和“WorkspaceRegion”。 View 加载到这些区域中。为了测试基本设置,我在 Prism 区域管理器中注册了所有三个 View ,以便它们在启动时加载,并且都按预期工作。
接下来,我修改了设置,以便在启动时仅加载任务按钮。其他 View 只会根据请求加载,通过单击任务按钮。我的模块初始值设定项如下所示:
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()
来显示 View :
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
和 RibbonTab
对象从 Unity 解析为 System.Object
类型。这是 Unity 的限制和我用来注册 View 对象的重载。要让它们解析为正确的类型,您需要为 IUnityContainer.RegisterType()
使用不同的重载:
// Register other view objects with DI Container (Unity)
m_Container.RegisterType<Object, ModuleAView>("ModuleAView");
m_Container.RegisterType<Object, ModuleARibbonTab>("ModuleARibbonTab");
此重载将 Unity 的 native System.Object
分辨率映射到所请求 View 的正确类型。请参阅第 13 页的注释。 开发人员指南的 120。
第二个问题在我的问题中没有明确说明,但在我解决第一个问题时出现了。当我切换到另一个模块时,我希望每个模块的 RibbonTab
都被删除。由于我的功能区区域就像一个 ItemsControl
,所以 RibbonTabs
最终都被显示了——当我切换到模块时,模块 A 的 RibbonTab
没有被卸载B. 为了解决这个问题,我在 RibbonTab
类上实现了 IRegionMemberLifetime
。该问题在第开发人员指南的 121。
顺便说一句,我在 View 对象上实现了 IRegionMemberLifetime
接口(interface),而不是它们的 View Models,因为该接口(interface)不会影响应用程序的后端,只会影响 View 对象。
关于c# - Prism 4 : RequestNavigate() not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5128666/
在每个 View 中 public partial class View2 : UserControl, IRegionMemberLifetime, INavigationAware { pub
我正在构建一个演示应用程序来学习 Prism 4 的导航功能。该应用程序有两个模块——每个模块有三个 View : 带有文本 block (“欢迎来到模块 A”)的用户控件 一个 RibbonTab(
我对 Prism 还很陌生,我目前正在使用 Prism 作为概念验证项目重写我们现有的应用程序之一。 该应用程序使用 MVVM 和 ViewModel 优先方法:我们的 ViewModel 由容器解析
我正在尝试学习 Prism Navigation 支持。目前,我有一个 Prism 区域,我想使用 RegionManager.RequestNavigate() 将 View 加载到该区域。导航确实
我正在使用 Prism view-based navigation使用 RequestNavigate 方法。 我遇到的问题是我必须向容器注册所有 ViewModel: container.Regis
在Prism 7中,我可以像这样从IModuleRegisterForNavigation和RequestNavigate: public class ModuleAModule : IModule
我正在使用 Telerik RadRibbonView在我的 WPF 4.5 项目中。设置如下所示。 在我的 Shell 中,我有一个 RibbonView 和一个 TabControl,定义为称为“
我将 prism5 与 regionManager 一起使用。以下是我如何注册我的观点以及我如何尝试导航。 _container.RegisterType("MyView"); 这就是我的导航方式 _
我使用一个区域和两个 View 。我有一个 ComboBox,让用户可以选择区域中的 View 。 我有两个问题: 第一个问题是: _regionManager.Regions.Add("MyRegi
我正在使用 prism 4.0,wpf, 我为 devx DocumentGroup 创建了 RegionAdapter。 我有一个显示为 DocumentPanel(DocumentGroup 的子
在 WPF 窗体上,我有一个超链接,当单击它时,应该会在重定向到内部网页之前聚合数据库中的一些数据。 目前 XAML 看起来如下: Launch Payments Portal 使用 Hype
我正在使用 Prism用于在我的 WPF MVVM 应用程序中导航。我的观点如下。 // MyView is the data type of the view I want to register
我是一名优秀的程序员,十分优秀!