问题标签 [prism-5]

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 投票
1 回答
441 浏览

wpf - WPF PRISM 5.0 和 Unity IoC:尝试使用支持依赖注入的 PopUpWindow 实现可重用视图

这是我在 StackOverflow 上的第一篇文章,如果我不完全清楚,请原谅我。

我的 WPF 项目使用 PRISM 5.0 和 Unity 作为容器。这是我第一个使用 PRISM 和 Unity 的项目。

在我的应用程序中,我正确地将视图加载到我的 MainWindow 中。此视图显示有关项目的信息的友好版本。我在这个屏幕上有一个编辑按钮,我希望它调用一个带有适当控件的模式窗口来编辑这个项目。到目前为止,我选择了 InteractionRequestTrigger -> PopUpWindowAction 方法,因为它是实现结果的最直接的方法。我不喜欢这种方法。

但是,我注意到我无法让依赖注入为我试图在模式中使用的 View 的 ViewModel 构造函数工作。这可能是因为我没有使用 Region 注册 View 或完成任何相关的腿部工作,如果我不得不猜测的话,PopUpWindowAction 只是将我的用户控件放到一个普通的表单上。

我的问题是,我能否实现一个传递自定义视图和 ViewModel 的模式对话框,并让它像调用它的父 View 和 ViewModel 一样工作?即支持依赖注入等。完成编辑逻辑后,我想理想地重新使用 View 和 ViewModel 来添加项目功能,但我想我将使用我的 Shell 的“主要区域”注册该视图,因此,我想在那里也使用依赖注入。

希望这很清楚。我认为代码示例在这里并没有太大帮助,但是如果是这样,请告诉我,我可以整理一个简单的示例来说明上述内容。

0 投票
2 回答
1251 浏览

c# - 在弹出窗口中获取 IOC 容器

我在我的 WPF 应用程序中使用 PRISM 5。我的应用程序中的 Shell 视图有两个区域,将其视为 A 和 B。区域 A 包含一个弹出窗口(PRISM 5 交互功能用于显示弹出窗口)。

当我在视图的构造函数中创建弹出视图模型的实例时,该应用程序正在工作。

工作代码

但是当我尝试使用依赖注入创建视图模型实例时。应用程序 InitializeComponent();在父视图(视图 A)上失败。

DI 不工作代码

在模块/引导程序中查看模型注册

发生了错误

发生 NULLReference 异常

Stacktrace(针对问题编辑)

AViewModel(编辑了一个以避免项目特定信息)

0 投票
1 回答
114 浏览

wpf - 如何使用棱镜共享接口的实现?

根据 MSDN,如果您使用该RegisterInstance方法注册了对象的现有实例,则容器会为所有对 Resolve 或 ResolveAll 的调用或当依赖机制将实例注入其他类时返回相同的实例。

dataService我为图层创建一个项目并使用

我希望每当我需要时IQuoteSource,在应用程序的生命周期内只创建一个实例。但是在另一个项目程序集中,当我在构造函数中使用接口时,IBQuoteSource会创建另一个。(正如我所见的构造函数IBQuoteSource被再次调用)那么如何在应用程序中共享接​​口的一个实现呢?

0 投票
1 回答
538 浏览

architecture - 棱镜模块和多个 DI 容器

我们的应用程序有几个窗口。目前它们在单独的进程中运行,但这使得它们之间的通信很尴尬(并且增加了 JMS 连接等资源)。想法是将结构重构为单一进程,以简化通信和资源/服务共享。

我想以这种方式使用棱镜模块:

棱镜模块

这个想法是将每个窗口的“主程序”加载为一个棱镜模块,然后每个模块可以在它认为合适的时候初始化自己的 DI 容器(每个窗口由不同的团队制作)。模块不会对彼此的 UI 做出贡献,但它们可以通过 Main MEF 容器共享服务。Main 还可以加载一些可用于模块的通用服务。

通过将每个模块分离到其自己的 DI 容器中,我试图防止模块之间的依赖地狱,并鼓励更规范地使用来自另一个模块的服务。

  1. 这甚至可能吗,或者 DI 容器是否相互冲突(处于同一进程中)?
  2. Prism 中有什么东西会反对这种解决方案吗?
  3. 我应该只创建自己的迷你模块系统而不是棱镜 IModule

我们一直在研究的另一种可能性是将每个模块放到它自己的 AppDomain 中。然而,这将有其自身的缺点(如共享服务必须通过 wcf 等完成)。然而,单独的 AppDomain 可以防止可能的 DI 容器冲突,并允许 main 在 AppDomain 失败的情况下作为看门狗工作。有人对基于 AppDomain 的解决方案有经验吗?有没有这里没有描述的问题?

0 投票
1 回答
112 浏览

c# - EF6 中的延迟加载未填充 POCO 中的相关实体列表

我们对现有数据库使用代码优先方法。ORM 在我们的应用程序中是 EF6,我们也使用 PRISM 5.0。使用 RequestNavigate 方法将对象作为参数传递给其他视图模型后出现问题。

我们的对象:

我们在传递的 OnNavigatedTo 方法中收到 Praconicy 的对象。

在这个 ViewModel 中,我们引用了 Pracownicy POCO [NotMapped] 属性,它查询相关的 KartyRCP 实体(与 KartyRCP (Worker.KartyRCP) 是一对多的关系)。

当我们显示 Pracownicy 的第一个实例时,结果与预期的一样——选择了一个 KartyRCP。但是当我们尝试显示另一个 Praconicy 实例时,AktualnaKartaRCP 属性返回 null。这是因为 KartyRCP 没有填充数据并且包含 0 个项目,即使它们存在于数据库中。更奇怪的是,如果我们再次尝试打开同一个实例 Praconicy,KartyRCP 就会被填充。

我们不确定为什么从 POCO 类内部查询时延迟加载不填充相关实体。

我们发现了两个解决方法,首先是从视图模型中请求列表,该视图模型用数据填充 KartyRCP。:var WorkAroundGetList = Worker.KartyRCP;。其他解决方法是使用 include 语句包含要使用 Praconicy 急切加载的表:.Include(z => z.KartyRCP)

但我们对这样的解决方案并不满意。提前感谢您的帮助。

0 投票
1 回答
423 浏览

c# - ObservableCollection 丢失了它的集合

将 WPF 与 Prism 和 Unity 一起使用 -

我有一个奇怪的缺陷,即 ObservableCollection 正在丢失它的集合。

我添加了一个真正的支持字段,以查看自动属性是否发生了一些有趣的事情。

我在字段上添加了一个 CollectionChanged 事件处理程序,该处理程序仅在我期待它时触发。

我正在使用服务定位器来检索实例,所以我想也许我得到了一个不同的实例,但其他属性和字段具有先前访问的预期值。

存储 ViewModel -

取回它——

ObservableCollection 字段 -

ObservableCollection 属性 -

ObservableCollection 字段事件处理程序 -

0 投票
1 回答
1148 浏览

c# - Prism 5 中 INavigationAware 的问题

我对使用 Prism 的 WPF 和 MVVM 还很陌生,并且遇到了 Prism 导航问题。每次导航到特定视图时,我都想加载一个新视图;但是,如果我输入一些数据或完全处理一些数据,离开并返回,现有数据始终保留在视图中。

我在这里阅读过类似的问题,例如thisthis。两者都指向使用INavigationAwareor IRegionMemberLifetime。我试图在我的 ViewModel 中实现这两者;但是,似乎没有人为我解决这个问题。

如果我使用INavigationAware并设置IsNavigationTarget为 false,则视图永远不会加载。如果我使用IRegionMemberLifetime并设置KeepAlive为 false,它仍然会保留我的数据。

我可以发布代码;但是,它很简单,看起来与链接问题中的相同。有人对 Prism 导航有类似的问题吗?

任何帮助表示赞赏。

编辑 - 添加示例代码

为了摆脱我所拥有的其他代码的任何红鲱鱼,我创建了一个新的 Prism 应用程序,其中包含最基本的必需品。导航返回时视图不显示的问题已经解决;但是,视图仍保留输入的值。

这是一些示例代码:

模型:

我用两个 TextBox 控件创建了一个基本视图,1 个绑定,1 个不绑定:

视图模型:

当我运行它时,绑定和未绑定的控件在导航回时都会保留它们的值。

0 投票
1 回答
274 浏览

c# - 将自定义用户控件绑定到 RegionContext 的属性

我正在通过编写一个小型 HR 应用程序来学习 Prism(版本 5)框架。

My EmployeeSummaryView 是一个简单的主详细信息页面,它使用选项卡控件来更好地组织 Person 类型的属性。此选项卡控件有一个区域上下文绑定到 CurrentEmployee。

我在“联系信息”选项卡上苦苦挣扎。在这里,我使用自定义用户控件来编辑邮寄地址。我建立绑定的第一直觉是执行以下操作:

但是,我对 Prism 和 MVVM 了解得越多,这种气味就越难闻。

将自定义控件绑定到 RegionContext 上的属性的正确方法是什么?

0 投票
0 回答
206 浏览

wpf - prism5 wpf 视图切换导航快速入门演示不运行

我是 PRISM 新手,下载了快速入门演示,并尝试了视图切换导航。我可以构建解决方案,那里没有错误,但是当我尝试运行应用程序时,它给出了无法加载 CalendarModule.dll 的错误。

Microsoft.Practices.Prism.Composition.dll 中出现“Microsoft.Practices.Prism.Modularity.ModuleTypeLoadingException”类型的未处理异常

附加信息:无法加载模块 CalendarModule 的类型。

错误是:无法加载文件或程序集“ViewSwitchingNavigation.Calendar.dll”或其依赖项之一。该系统找不到指定的路径。

我在 bootstrapper.run() 遇到了这个错误

感谢您的任何提示!

0 投票
1 回答
576 浏览

c# - TreeView 和 Prism-5 的问题

我在尝试使用 Prism 和 MVVM 构建 TreeView 时遇到了很多问题。我将我的应用程序划分为多个区域,其中一个区域有一个带有 TreeView 的模块,另一个区域有一个功能区作为模块,可以在其中创建和配置某种项目。这些区域使用棱镜进行通信,效果很好。因此,当在“功能区模块”中创建项目时,“树视图模块”会得到它,这就是问题所在。

“TreeView 模块”的 ViewModel 有一个 ObservableCollection,应该在其中添加所有项目。项目名称和此类的其他属性应显示在 TreeView 中。

这就是 DataSet

这是 TreeViewViewModel

这里是视图中的代码

有了这个,我可以在我的 TreeView 中获取项目的名称,但例如,这里是我的问题:

1.- 如何获得具有每个 DataSet 名称的 TreeNodes 的第二层次结构?

2.- 如何管理 TreeView 中的事件?

非常感谢您提前。