问题标签 [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.
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 的“主要区域”注册该视图,因此,我想在那里也使用依赖注入。
希望这很清楚。我认为代码示例在这里并没有太大帮助,但是如果是这样,请告诉我,我可以整理一个简单的示例来说明上述内容。
c# - 在弹出窗口中获取 IOC 容器
我在我的 WPF 应用程序中使用 PRISM 5。我的应用程序中的 Shell 视图有两个区域,将其视为 A 和 B。区域 A 包含一个弹出窗口(PRISM 5 交互功能用于显示弹出窗口)。
当我在视图的构造函数中创建弹出视图模型的实例时,该应用程序正在工作。
工作代码
但是当我尝试使用依赖注入创建视图模型实例时。应用程序 InitializeComponent();
在父视图(视图 A)上失败。
DI 不工作代码
在模块/引导程序中查看模型注册
发生了错误
发生 NULLReference 异常
Stacktrace(针对问题编辑)
AViewModel(编辑了一个以避免项目特定信息)
wpf - 如何使用棱镜共享接口的实现?
根据 MSDN,如果您使用该RegisterInstance
方法注册了对象的现有实例,则容器会为所有对 Resolve 或 ResolveAll 的调用或当依赖机制将实例注入其他类时返回相同的实例。
dataService
我为图层创建一个项目并使用
我希望每当我需要时IQuoteSource
,在应用程序的生命周期内只创建一个实例。但是在另一个项目程序集中,当我在构造函数中使用接口时,IBQuoteSource
会创建另一个。(正如我所见的构造函数IBQuoteSource
被再次调用)那么如何在应用程序中共享接口的一个实现呢?
architecture - 棱镜模块和多个 DI 容器
我们的应用程序有几个窗口。目前它们在单独的进程中运行,但这使得它们之间的通信很尴尬(并且增加了 JMS 连接等资源)。想法是将结构重构为单一进程,以简化通信和资源/服务共享。
我想以这种方式使用棱镜模块:
这个想法是将每个窗口的“主程序”加载为一个棱镜模块,然后每个模块可以在它认为合适的时候初始化自己的 DI 容器(每个窗口由不同的团队制作)。模块不会对彼此的 UI 做出贡献,但它们可以通过 Main MEF 容器共享服务。Main 还可以加载一些可用于模块的通用服务。
通过将每个模块分离到其自己的 DI 容器中,我试图防止模块之间的依赖地狱,并鼓励更规范地使用来自另一个模块的服务。
- 这甚至可能吗,或者 DI 容器是否相互冲突(处于同一进程中)?
- Prism 中有什么东西会反对这种解决方案吗?
- 我应该只创建自己的迷你模块系统而不是棱镜 IModule
我们一直在研究的另一种可能性是将每个模块放到它自己的 AppDomain 中。然而,这将有其自身的缺点(如共享服务必须通过 wcf 等完成)。然而,单独的 AppDomain 可以防止可能的 DI 容器冲突,并允许 main 在 AppDomain 失败的情况下作为看门狗工作。有人对基于 AppDomain 的解决方案有经验吗?有没有这里没有描述的问题?
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)
但我们对这样的解决方案并不满意。提前感谢您的帮助。
c# - ObservableCollection 丢失了它的集合
将 WPF 与 Prism 和 Unity 一起使用 -
我有一个奇怪的缺陷,即 ObservableCollection 正在丢失它的集合。
我添加了一个真正的支持字段,以查看自动属性是否发生了一些有趣的事情。
我在字段上添加了一个 CollectionChanged 事件处理程序,该处理程序仅在我期待它时触发。
我正在使用服务定位器来检索实例,所以我想也许我得到了一个不同的实例,但其他属性和字段具有先前访问的预期值。
存储 ViewModel -
取回它——
ObservableCollection 字段 -
ObservableCollection 属性 -
ObservableCollection 字段事件处理程序 -
c# - Prism 5 中 INavigationAware 的问题
我对使用 Prism 的 WPF 和 MVVM 还很陌生,并且遇到了 Prism 导航问题。每次导航到特定视图时,我都想加载一个新视图;但是,如果我输入一些数据或完全处理一些数据,离开并返回,现有数据始终保留在视图中。
我在这里阅读过类似的问题,例如this和this。两者都指向使用INavigationAware
or IRegionMemberLifetime
。我试图在我的 ViewModel 中实现这两者;但是,似乎没有人为我解决这个问题。
如果我使用INavigationAware
并设置IsNavigationTarget
为 false,则视图永远不会加载。如果我使用IRegionMemberLifetime
并设置KeepAlive
为 false,它仍然会保留我的数据。
我可以发布代码;但是,它很简单,看起来与链接问题中的相同。有人对 Prism 导航有类似的问题吗?
任何帮助表示赞赏。
编辑 - 添加示例代码
为了摆脱我所拥有的其他代码的任何红鲱鱼,我创建了一个新的 Prism 应用程序,其中包含最基本的必需品。导航返回时视图不显示的问题已经解决;但是,视图仍保留输入的值。
这是一些示例代码:
模型:
我用两个 TextBox 控件创建了一个基本视图,1 个绑定,1 个不绑定:
视图模型:
当我运行它时,绑定和未绑定的控件在导航回时都会保留它们的值。
c# - 将自定义用户控件绑定到 RegionContext 的属性
我正在通过编写一个小型 HR 应用程序来学习 Prism(版本 5)框架。
My EmployeeSummaryView 是一个简单的主详细信息页面,它使用选项卡控件来更好地组织 Person 类型的属性。此选项卡控件有一个区域上下文绑定到 CurrentEmployee。
我在“联系信息”选项卡上苦苦挣扎。在这里,我使用自定义用户控件来编辑邮寄地址。我建立绑定的第一直觉是执行以下操作:
但是,我对 Prism 和 MVVM 了解得越多,这种气味就越难闻。
将自定义控件绑定到 RegionContext 上的属性的正确方法是什么?
wpf - prism5 wpf 视图切换导航快速入门演示不运行
我是 PRISM 新手,下载了快速入门演示,并尝试了视图切换导航。我可以构建解决方案,那里没有错误,但是当我尝试运行应用程序时,它给出了无法加载 CalendarModule.dll 的错误。
Microsoft.Practices.Prism.Composition.dll 中出现“Microsoft.Practices.Prism.Modularity.ModuleTypeLoadingException”类型的未处理异常
附加信息:无法加载模块 CalendarModule 的类型。
错误是:无法加载文件或程序集“ViewSwitchingNavigation.Calendar.dll”或其依赖项之一。该系统找不到指定的路径。
我在 bootstrapper.run() 遇到了这个错误
感谢您的任何提示!
c# - TreeView 和 Prism-5 的问题
我在尝试使用 Prism 和 MVVM 构建 TreeView 时遇到了很多问题。我将我的应用程序划分为多个区域,其中一个区域有一个带有 TreeView 的模块,另一个区域有一个功能区作为模块,可以在其中创建和配置某种项目。这些区域使用棱镜进行通信,效果很好。因此,当在“功能区模块”中创建项目时,“树视图模块”会得到它,这就是问题所在。
“TreeView 模块”的 ViewModel 有一个 ObservableCollection,应该在其中添加所有项目。项目名称和此类的其他属性应显示在 TreeView 中。
这就是 DataSet
这是 TreeViewViewModel
这里是视图中的代码
有了这个,我可以在我的 TreeView 中获取项目的名称,但例如,这里是我的问题:
1.- 如何获得具有每个 DataSet 名称的 TreeNodes 的第二层次结构?
2.- 如何管理 TreeView 中的事件?
非常感谢您提前。