WPF中的复杂视图

时间:2009-08-14 16:13:19

标签: architecture prism cag

我正在从事个人项目。我开始上一篇文章(Point of Sale Application Architecture)。

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

请参阅随附的图像文件。我的大多数窗口都有多个视图。

我的问题是:

  1. 你认为看着窗户 我的项目是一个很好的候选人 CAG(Prism)或者它是一种矫枉过正的
  2. 我能否获得POPUp模态 窗户并与他们沟通 来自其父视图 - 区域 - 模块。
  3. Prism中的多个Windows(假设 我可以创建多个shell), 是他们之间的沟通 复杂的
  4. 阅读关于创建复杂的SO 子视图作为属性的视图。 这是一个好方法还是也是 很多代码
  5. 我越是考虑应用某些模式,我就越来越困惑

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

    谢谢 月

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

2 个答案:

答案 0 :(得分:1)

我看不到你的截图,但我可以在这里给你一点方向。我最近一直在设置多目标(WPF / Silverlight)复合应用程序的shell,在我去的时候学习库。

  1. “我的大多数窗口都有多个视图。” - 这本身可能意味着你会喜欢你在Composite Application Library中找到的东西。而MVVM是CAL的完美模式。在StockTrader参考应用程序中,他们使用术语PresentationModel,但这与MVVM基本相同。

  2. Popup模式在WPF和SL中都很有效(通过Toolkit扩展ChildWindow控件)。您可以通过注入视图和服务以与常规区域相同的方式与他们进行通信。我发现特别简洁的是你可以在弹出窗口中定义一个区域,在加载app(模块)时注册视图(即使区域本身尚未加载),然后当区域弹出时在那时注入正确的视图。换句话说,在显示区域之前,您不必参与推迟视图的注入,这是我期望必须做的。

  3. 没试过这个 - 无法发表评论。

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

答案 1 :(得分:1)

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

3)不共享相同视图模型的视图之间的通信是通过Prism中的EventAggregator完成的。这是一个非常容易使用的Publisher Subscriber模型的消息。你可以毫不费力地理解这一点。

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

  • Sub ViewModels作为您的属性 视图模型。你可以用 DataTemplates提供外观 他们没有在中指定UI 视图模型。
  • 子区域。这是完全可以接受的。有时它可能会变得棘手,具体取决于你的UI,因为你最终会试图跟踪你的RegionManager范围,但它是可行的。
HTH,安德森