【问题标题】:Complex View in WPFWPF 中的复杂视图
【发布时间】:2009-08-18 11:53:11
【问题描述】:

我正在做一个个人项目。我从以前的帖子 (Point of Sale Application Architecture) 开始。

尝试使用-存储库-服务和查看模式-查看方法

请查看附件中的图片文件。我的大多数窗户都会有多个视图。

我的问题是:

  1. 看着窗户你觉得 我的项目是一个很好的候选人 CAG(棱镜)还是矫枉过正
  2. 我能否获得 POPUp 模态 窗口并与他们交流 从其父视图区域模块。
  3. Prism 中的多个窗口(假设 我可以创建多个外壳), 他们之间是否有交流 复杂
  4. 阅读关于创建复杂的 SO 以子视图为属性的视图。 这是一个好方法还是也会 很多代码

我越是考虑应用一些模式,我就越感到困惑

我相信你们中的一些人也有类似的问题,也许你的方法可能会为我解决问题。

谢谢 三月

http://www.flickr.com/photos/themarworld/3820178039/ http://www.flickr.com/photos/themarworld/3820178039/

【问题讨论】:

  • 只是一个想法。我们可以重新排列外壳中的区域(左上宽度高度可见)。我可以有嵌套区域然后我可能只需要一个外壳,并且可以根据需要将视图加载到区域中。看了 Woodgrove 金融应用演示 @scorbs.com/workapps/woodgrove/FinanceApplication.xbap 后有了这个想法
  • 这似乎对我正在寻找的东西有所帮助-codeplex.com/CompositeWPFContrib
  • 添加一个指向 flickr 图片的链接,因为不确定如何插入

标签: architecture prism cag


【解决方案1】:

我看不到您的屏幕截图,但我可以在这里给您一些指导。我最近一直在设置多目标(WPF/Silverlight)复合应用程序的外壳,边学习边学习库。

  1. “我的大部分窗口都有多个视图。” -- 这本身可能意味着您会喜欢您在复合应用程序库中找到的内容。 MVVM 是 CAL 的完美模式。在 StockTrader 参考应用程序中,他们使用术语 PresentationModel,但这本质上与 MVVM 相同。

  2. Popup modals 在 WPF 和 SL 中都能很好地工作(通过 Toolkit 扩展 ChildWindow 控件)。您将与他们以与常规区域相同的方式进行通信 - 通过注入视图和服务。我发现特别巧妙的是,您可以在弹出窗口中定义一个区域,在加载应用程序(模块)时向其注册视图(即使该区域本身尚未加载),然后当该区域弹出时此时注入正确的视图。换句话说,您不必参与延迟视图的注入,直到显示区域,这是我期望的。

  3. 没试过——无法评论。

  4. 不确定“子视图”,但区域内的区域肯定是可能的。

【讨论】:

  • 谢谢韦恩。会看到为什么图像没有显示。很好的一点是,随着开发的进行,我应该学习图书馆。我将继续使用 CAL。我担心沟通是否会成为问题。您是否有使用 2009 年 2 月发布的 CAL 和 Toolkit 的经验
  • 是的,我使用的是 2 月版本——我也一直等到 SL3 才开始我的项目,因为我想要一个多目标解决方案,并且在 SL3 中有一些关于 CAL 的改进和修复。
【解决方案2】:

Wayne 对 #1 和 #2 有很好的答案...我会得到 #3 和 #4。

3) 不共享相同视图模型的视图之间的通信是通过 Prism 中的 EventAggregator 完成的。这是一个非常易于使用的消息发布者订阅者模型。理解这一点不会有任何问题。

4) 我不喜欢将视图作为视图模型的属性的想法。这是一个关注点分离的问题。您正在为您的 ViewModels 与界面无关,这意味着太多的界面泄漏到您的 ViewModel 中。 2个可接受的替代方案是

  • 子视图模型作为您的属性 视图模型。你可以使用 提供外观的 DataTemplates 他们没有在 视图模型。
  • 子区域。这是完全可以接受的。有时它会根据您的 UI 变得棘手,因为您最终会尝试跟踪您的 RegionManager 范围,但这是可行的。

HTH,安德森

【讨论】:

  • Anderson,re 4) 你是在做 View-first 实例化并注入 ViewModel 吗?我对让 ViewModels 也引用 Views 感到紧张,但 StockTraderRI 使用 ViewModel-first 方法,据我所知,这要求模型持有对视图的引用。您是否遇到过 ViewModel-first 的任何重大“泄漏”问题?我们的项目仍处于开发初期,所以如果我能找到令人信服的理由,我们就有时间转换。
  • 我们分别创建视图和视图模型,并通过设置 DataContext 将它们结合起来。我看不出他们应该直接相互引用的充分理由,而且我认为引用视图的 ViewModel 绝对是违规行为。您需要执行的任何操作都需要 ViewModel 具有对您可以解决的视图的引用。您可以在 Josh Smith 或 Marlon Grech 的网站上找到大部分内容。
  • 谢谢你们。我想我正在掌握 Prism 的诀窍。关于这些东西的信息太多了,这对我的小脑袋来说太多了。所以我开始了这个项目。我在视图模型中做参考视图,但这是为了让现在很少有东西工作,随着时间的推移,我将删除参考。我的想法是,如果我可以启动并运行一个模块并实施最佳实践,那么休息就会到位。 Josh Smith 或 Marlon Grech 的博客很棒,我一直在引用它们。
  • 作为一个注释......你关于 View first 与 ViewModel first 的问题(以及何时以及如何实例化每个)出现在 Herding Code 插曲中。想你可能想听听。 herdingcode.com/?p=208
猜你喜欢
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多