2009-08-14 96 views
0

我正在开发一个个人项目。我从以前的帖子开始(Point of Sale Application Architecture)。WPF中的复杂视图

试图使用 - 仓库 - 服务,查看模态 - 查看方法

请参阅附件的图像文件。我的大多数窗户将有多个视图。

我的问题是:

  1. 在窗户往外看,你认为 我的项目是 CAG(棱镜)的候选资格或者是矫枉过正
  2. 我将能够得到弹出模式 窗口,并从其父视图区域模块与其通信 。
  3. 在棱镜多个Windows(假设 ,我可以创建多个壳), 是它们之间的通信 复杂
  4. 阅读SO有关创建具有作为属性的子视图复杂 意见。 这是一个不错的方法或将过 多少代码

我越考虑应用一些模式的更多,我越来越糊涂

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

谢谢 月

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

+0

只是一个想法。我们是否可以在一个外壳中重新布置区域(左上宽度高度可见)。我可以嵌套区域然后可能我只需要一个外壳,并可以根据需要将视图加载到区域中。在看过Woodgrove财务应用程序演示之后得到了这个想法@ http://scorbs.com/workapps/woodgrove/FinanceApplication.xbap – TheMar 2009-08-14 18:36:31

+0

这似乎有助于我所寻找的-http://www.codeplex.com/CompositeWPFContrib – TheMar 2009-08-14 19:01:35

+0

添加一个链接到flickr图片,因为不知道如何插入一个 – TheMar 2009-08-15 17:44:53

回答

1

我看不到你的截图,但在这里我可以给你一点方向。我最近设置了一个多目标(WPF/Silverlight)复合应用程序的外壳,并且随时了解这些库。

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

  2. Popup模式在WPF和SL(通过工具包扩展ChildWindow控件)中都很出色。您可以像使用常规区域一样与他们沟通 - 通过注入视图和服务。我发现特别整洁的是,你可以在弹出窗口中定义一个区域,当应用程序(模块)加载时(即使区域本身尚未加载),使用它注册视图,然后当区域弹出正确的意见是在那个时候注入的。换句话说,您不必参与推迟视图的注入,直到显示该区域,这是我期望必须做的。

  3. 还没有试过 - 无法评论。

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

+0

谢谢Wayne。会看到为什么图像没有显示。随着发展的进展,我应该学习图书馆的好处。我将继续与CAL。我担心沟通是否会成为问题。您是否有过使用2009年2月发行版CAL和Toolkit的经验 – TheMar 2009-08-15 17:42:01

+0

是的,我正在使用2月版本 - 在启动项目之前,我也一直等到SL3,因为我想要一个多目标解决方案,并且有一些改进和修复关于CAL的SL3。 – lesscode 2009-08-19 02:25:04

+0

谢谢你韦恩的信息 – TheMar 2009-08-28 15:28:11

1

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

3)不共享相同视图模型的视图之间的通信通过Prism中的EventAggregator完成。对于消息使用Publisher Subscriber模型非常简单。你不会理解这一点。

4)我不喜欢将视图作为视图模型属性的想法。这是一个分离问题的问题。你正在拍摄你的ViewModel作为界面不可知的,这意味着有太多的界面渗透到你的视图模型中。 2个可接受的替代方案是

  • Sub ViewModels作为您的 ViewModel的属性。您可以使用 DataTemplates将它们看作 而不指定 ViewModel中的UI。
  • 子区域。这是完全可以接受的。有时候,根据您的用户界面,它会变得棘手,因为您最终会试图跟踪您的RegionManager范围,但这是可行的。

HTH,安德森

+0

安德森,重4) 你在做View-first实例化和注入ViewModel吗? 我对ViewModels引用视图也很紧张,但StockTraderRI使用ViewModel优先方法,它需要模型持有对视图的引用,据我所知。您是否首先反驳了ViewModel的任何重大“泄漏”问题?对于我们的项目,它还处于开发早期阶段,所以如果我能找到一个令人信服的理由,我们有时间进行切换。 – lesscode 2009-08-19 02:31:09

+0

我们通过设置DataContext分别创建视图和视图模型并将它们结婚。我没有看到他们应该直接引用对方的好理由,我认为ViewModel对视图的引用绝对是违规行为。任何你需要做的事情都需要ViewModel引用一个你可以解决的视图。你可以在Josh Smith或Marlon Grech的网站上找到大多数的东西。 – 2009-08-19 21:15:16

+0

谢谢你们。我想我正在接受棱镜的诀窍。有这么多关于这些东西的信息对于我的小脑子来说太过分了。所以我开始了这个项目。我在视图模型中使用了参考视图,但这是为了尽可能少的工作,并且随着时间的流逝,我将移除引用。我正在推进的想法是,如果我可以启动并运行一个模块并实施最佳实践,那么其余部分将落实到位。 Josh Smith或Marlon Grech的博客很棒,我一直在引用他们。 – TheMar 2009-08-28 15:27:15