Architecture WPF中的复杂视图

Architecture WPF中的复杂视图,architecture,prism,cag,Architecture,Prism,Cag,我正在做一个私人项目。我从上一篇文章()开始 尝试使用-repository-service和View-model-View方法 请参阅随附的图像文件。我的大多数窗口都有多个视图 我的问题是: 看着窗户,你觉得呢 我的项目是一个很好的候选人 CAG(Prism)还是过度杀伤力 我能得到你的帮助吗 windows并与之通信 从其父视图区域模块 棱镜中的多个窗口(假设 我可以创建多个shell), 他们之间的交流是什么 复杂的 请继续阅读有关创建复杂系统的内容 将子视图作为属性的视图。 这是一个好办

我正在做一个私人项目。我从上一篇文章()开始

尝试使用-repository-service和View-model-View方法

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

我的问题是:

  • 看着窗户,你觉得呢 我的项目是一个很好的候选人 CAG(Prism)还是过度杀伤力
  • 我能得到你的帮助吗 windows并与之通信 从其父视图区域模块
  • 棱镜中的多个窗口(假设 我可以创建多个shell), 他们之间的交流是什么 复杂的
  • 请继续阅读有关创建复杂系统的内容 将子视图作为属性的视图。 这是一个好办法还是也会 很多代码
  • 我越是想应用一些模式,我就越是感到困惑

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

    多谢各位 玷污


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

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

  • 弹出模式在WPF和SL中都非常有效(通过工具包扩展ChildWindow控件)。您将以与常规区域相同的方式与他们进行通信——通过注入视图和服务。我发现这其中特别巧妙的地方是,你可以在弹出窗口中定义一个区域,在加载应用程序(模块)时向它注册视图(即使该区域本身尚未加载),然后在该区域弹出窗口时,在该点注入正确的视图。换句话说,您不必参与延迟视图的注入,直到显示区域为止,这是我所期望的

  • 还没有尝试过这个--无法评论

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


  • 韦恩对#1和#2有很好的答案。。。我会得到3和4

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

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

    • 子视图模型作为对象的属性 视图模型。你可以用 提供外观的数据模板 在不指定 视图模型
    • 次区域。这是完全可以接受的。有时,这可能会变得棘手,这取决于您的UI,因为您最终会尝试跟踪RegionManager范围,但这是可行的

    嗯,安德森

    只是一个想法。我们可以重新排列外壳中的区域(左顶部宽度高度可见)。我可以有嵌套的区域吗?那么可能我只需要一个壳,并且可以根据需要将视图加载到区域中。在看过Woodgrove financial application demo后,我有了这个想法@这似乎有助于我寻找的东西-添加一个到flickr图像的链接,因为不知道如何插入OneHank you Wayne。将看到图像未显示的原因。很好的一点是,随着开发的进行,我应该学习图书馆。我要和卡尔一起去。我担心通讯是否会成为一个问题。你有使用2009年2月发布的CAL和ToolKit的经验吗?是的,我使用的是2月发布的--我一直等到SL3才开始我的项目,因为我想要一个多目标解决方案,并且SL3中有一些关于CAL的改进和修复。Anderson,re 4)你是否正在进行视图优先实例化和注入ViewModel?我对ViewModels引用视图也很紧张,但StockTraderRI使用ViewModel优先的方法,这要求模型尽可能保留对视图的引用。您是否首先遇到了ViewModel的任何重大“泄漏”问题?我们的项目还处于开发阶段,所以如果我能找到一个令人信服的理由,我们有时间切换。我们分别创建视图和视图模型,并通过设置DataContext将它们结合起来。我看不出他们应该直接引用彼此的好理由,我认为ViewModel引用视图肯定是一种违反。需要执行的任何操作都需要ViewModel对您可以解决的视图进行引用。你们可以在Josh Smith或Marlon Grech的网站上找到这些东西。谢谢你们。我想我正在掌握棱镜的诀窍。关于这些事情的信息太多了,对我的小脑袋来说太多了。所以我开始了这个项目。我确实在视图模型中引用了视图,但这是为了让现在很少的事情能够正常工作,随着时间的推移,我将删除引用。我的想法是,如果我能够启动并运行一个模块,并实现最佳实践,那么其余的模块就会到位。Josh Smith或Marlon Grech的博客很棒,我一直在引用他们。作为说明。。。您关于视图优先与视图模型优先(以及何时和如何实例化)的问题出现在一段代码中。我想你可能想听。