【发布时间】:2019-10-04 07:49:16
【问题描述】:
我有一个在应用程序中注册了几个不同区域的视图,每次调用都像
regionManager.RegisterViewWithRegion(regionName, viewType);
然后在需要时由 Prism 以某种方式实例化。是否可以在视图类构造函数中确定视图将被注入到哪个区域?
我试图在几种类似的情况下重用相同的视图,例如,GUI 的视觉效果是相同的,但视图后面的视图模型会以不同的方式实例化。我可以预期这是一个架构上的怪异,但我受到大型应用程序基础架构的限制。我可以影响注册视图的代码,所以如果有一种方法可以传递一些元数据来伴随每个注册,这些元数据可以稍后在实例化期间检索,我可以这样做。
【问题讨论】:
-
你想要的是否定拥有可重用视图的核心好处,这没有什么意义。如果您需要更改视图(即新区域的新行为),那么您的视图不能正确重用。如果不同地区需要不同的东西,那不是同一个观点吧?
-
嗯,他有一个可重用的view,而不是可重用的view models,他只想改变view model 取决于地区。
-
听起来像是模板或视图模型的好候选。实例化适当的视图模型。模板内容到 ui 中。你可以在 Prism 中做到这一点,或者你过去无论如何都可以做到。根据我的经验,Prism 的各种错综复杂的事物经常会阻碍事情的发展,否则如果没有它的所有区域和诸如此类的东西,它就很简单。不管你怎么做,你最好将父级和内容解耦,这样就不必依赖知道它们各自是什么类型了。
-
实际上,可重用性是这里的关键思想。我有几个地区的 GUI 应该是相似的,并且在每种情况下都适用于不同的业务情况。因此,相同的 GUI,不同的行为。让我很烦恼的是,我必须有单独的视图才能为我实例化不同的虚拟机。这就是为什么我想以某种方式接管虚拟机的实例化——无论是在我获得控制权的视图中,还是在自定义的 ContentLoader(它有其自身的复杂性)中。最后仍然使用单独的视图,但所有内容都被取出到用户控件中,所以 - 现在好了!