问题标签 [prism]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1754 浏览

wpf - Prism v2:寻求澄清为什么模块需要“向 shell 注册视图类型”

我正在阅读他们声明的Prism v2 指南:

在初始化期间,模块使用 RegionManager 来定位 shell 中的区域并向这些区域添加一个或多个视图,或者注册要在这些区域内创建的一个或多个视图类型

我知道视图是在引导程序中添加的,例如在 GetModuleCatalog() 方法中:

但是注册一个视图类型是什么意思呢?如果模块已经像上面的代码一样“添加视图”,为什么还需要向 shell “注册视图类型”?

0 投票
6 回答
2981 浏览

wcf - 将 Silverlight 客户端与服务引用生成的类解耦

我正在通过快速入门研究 Prism v2。我创建了一个具有以下签名的 WCF 服务:

当我在 silverlight 项目中添加对此服务的服务引用时,它会生成一个接口和一个类:

我试图通过传递接口而不是具体类来解耦我的应用程序。但我很难找到如何做到这一点的例子。当我尝试调用 EndGetMessage 然后更新我的 UI 时,我得到一个关于在错误线程上更新 UI 的异常。如何从后台线程更新 UI?


我试过了,但我得到了UnauthorizedAccessException : Invalid cross-thread access

异常由Application.Current.RootVisual.

0 投票
1 回答
312 浏览

prism - Prism 中的 ShellPresenter 是 MVP 模式中的 (P)resenter 吗?

我想了解 Prism(复合应用程序指南)。

了解 ShellPresenter 角色的最佳方式是什么?它是模型-视图-演示者中的演示者吗?

是这样,它与壳牌有什么关系?我知道 ShellPresenter 将 Shell 对象作为其构造函数的参数,并负责确保所有模块将其视图放置在正确的区域中。但是还有执行此操作的 RegionManager。

那些一直使用这个术语的人的任何澄清将不胜感激。

0 投票
3 回答
5127 浏览

prism - 在 Prism(复合应用程序指南)中,如何将视图动态加载到 TabControl 中?

在 Prism v2 应用程序中,我定义了两个区域,每个区域都是 tabcontrol 中的一个 tabitem:

在引导程序中加载了两个模块,每个模块都将一个视图注入到每个 tabitems 中:

现在,当然,我想执行我一直在阅读的解耦魔术并取消注释其中一个模块,并看到它的选项卡项根本没有出现。而是相反,还是有两个TabItem,一个是空的。这告诉我,我的应用程序仍然像以前糟糕的 WinForm 时代一样紧密耦合数据和 UI。

那么我需要在这里做什么才能使这个动态化,以便 UI 根据加载的模块动态更改,即我可以在我的引导程序中加载 10 个模块/视图,并且 TabControl 中会自动有 10 个 TabItems?

中间答案:

如果我只在 TabControl 中创建一个区域:

然后将两个控件加载到 MainRegion 中:

然后我得到一个带有两个选项卡的 TabControl,每个选项卡都有一个视图,这就是我想要的。

但未定义 TabItem 标头。如何动态定义标头(例如不在 XAML 中,而是在 View 类中动态定义)?

0 投票
2 回答
4284 浏览

prism - 如何让 Prism RegionManager 添加两个视图而不是只添加一个

我正在使用复合应用程序指南(第 2 版,2009 年 2 月)。

我已经用一个区域构建了 Shell,一个 Bootstrapper 和一个具有两个视图的 Employee Module,我希望 RegionManager 将这两个视图都添加到 shell 中的一个区域。

但是,该区域中仅显示添加到 RegionManager 的最后一个视图。

我需要更改什么以便两个视图都显示在 Shell 的区域中?

0 投票
4 回答
15436 浏览

inversion-of-control - 这在 Prism/Unity 中意味着什么:Container.Resolve()

(来自Prism V2 StockTrader 示例应用程序中的StockTraderRIBootstrapper.cs文件)

这有什么区别:

还有这个:

  • 我知道第二个示例是将容器视为工厂,走到它面前说“我需要一个 ShellPresenter 类型的实例化对象”。
  • 但是,如果,例如我需要发送参数,什么是“new ShellPresenter(1, true)”等的等价物呢?
  • 而且由于容器必须被告知 ShellPresenter,我希望在项目中的某个地方找到 ShellPresenter 类向容器注册的地方,例如,我期待

像这样的东西:

但无处可寻。那么容器如何知道这些类型以便它能够解决它们呢?我在自己的项目中重建了它并得到“依赖项的解决失败”错误,那么我需要在哪里注册这个依赖项?

这里的任何方向/讨论都会有所帮助。

无法解释的答案:

因此,在引导程序中,当我注册 Shell 本身时:

那么 Container 可以解析 ShellPresenter 类型。那么我注册Shell类型的时候, ShellPresenter类型是怎么注册的呢?

令人惊讶的答案:

好的,事实证明,您不必注册您尝试解析的类型,但您必须注册传递给您尝试解析的类型的构造函数的参数(接口)类型,即因为我注入IShellView 接口到我的 ShellPresenter 的构造函数中,我需要注册 IShellView 类型而不是 IShellPresenter 类型:

我通过尝试解析类型Tester对此进行了测试:

只要我将SomeClass注入它的构造函数:

在向容器注册SomeClass之前,我得到未解决的依赖错误:

然后它工作。这既令人惊讶,又具有教育意义。需要沉下心来。我要去喝杯咖啡,想一想。

如果有人能详细说明为什么会这样,将不胜感激。

0 投票
3 回答
2352 浏览

prism - Prism(复合应用程序库)应用程序的更多示例?

Microsoft 的模式和实践提供的示例非常有用:

  • 大约六个涉及特定问题的简单快速入门
  • StockTrader参考实现,它是一个相当全面的应用程序

但它缺少一个更有用的基础应用程序来读取和写入数据源(XML 或数据库),允许用户登录、编辑数据、注销等(类似于 ASP.NET MVC 附带的东西)。

由于 Prism 应用程序可能会变得相当复杂和冗长(StockTrader 示例几乎有 300 个文件没有测试),因此拥有一个处理每个人都需要为大多数应用程序构建的 CRUD 批量的应用程序会很有帮助。

有谁知道那里有任何数据编辑 Prism 示例应用程序

0 投票
3 回答
5554 浏览

silverlight - Prism 2 SL:单击按钮时从区域中删除视图

我是 Prism 的新手,我正在尝试确定在 Prism 2 应用程序中停用视图的最佳实践——当用户单击视图上的按钮时,我想停用视图。单击按钮时视图正在执行命令。

视图模型正在接收命令,但视图模型没有对 regionmanager 的引用。

视图模型应该知道区域管理器吗?即使视图模型有对它的引用,它也需要将视图实例传递给包含区域的 deactive 方法。

我正在为应用程序使用 MVVM 模式。

0 投票
2 回答
861 浏览

silverlight - PRISM2 命令和 silverlight

在 Silverlight 中使用命令功能时,我注意到一个奇怪的行为:

添加命令时:Click.Command 和 CommandParameter 属性,IsEnabled 属性停止运行:

如果我删除命令:属性 IsEnabled 功能正确。如果 IsEnabled 也绑定到我的视图模型上的值,则此行为是相同的。

这是一个错误吗?任何人都知道任何解决方法?

谢谢,马克

0 投票
3 回答
2183 浏览

wpf - 将关闭命令绑定到 Tabcontrol 数据模板中的按钮的问题

我正在使用复合应用程序指导模式来构建我的 WPF 应用程序。在我的 Shell 中,我有一个 tabcontrol,其中包含一个用于将视图动态加载到该区域的区域。视图被加载到 TabControl 中的新选项卡中。

我有一个用于实现 CloseButton 的 DataTemplate“TabItemTemplate”。我不知道如何将 DataTemplate 中的按钮命令绑定到 PresentationModel 中的关闭命令。如果我将命令绑定到 CompositCommand,则执行该命令。但随后我必须找出关闭按钮被按下的选项卡,并且只在该 PresentationModel 中执行 closeCommand。下面是数据模板。

有谁知道如何解决这个绑定问题?