代码之家  ›  专栏  ›  技术社区  ›  Jon Galloway

我应该在Silverlight项目中使用模型视图视图模型(MVVM)模式吗?

  •  41
  • Jon Galloway  · 技术社区  · 16 年前

    Silverlight控件的一个挑战是,当属性绑定到代码时,它们在Blend中不再真正可编辑。例如,如果有一个从数据馈送填充的ListView,则在Blend中编辑控件时,没有可见的元素。

    我听说,由WPF开发社区发起的MVVM模式还可以帮助保持Silverlight控件“可理解”。我还在绕着它转,但下面有一些解释:

    一个潜在的缺点是模式需要额外的类,尽管不一定需要更多的代码(如上面第二个链接所示)。思想?

    12 回复  |  直到 12 年前
        1
  •  32
  •   TomHastjarjanto    12 年前

    我肯定认为您应该为Silverlight应用程序使用MVVM模式——该模式的一个好处是,通过一些简单的技术,您实际上可以使您的应用程序真正变得可以使用。我经常将“可伸缩性”称为“可设计性设计”——即使用某些技术来确保应用程序在混合中看起来很棒。

    Torbj rn指出,其中一种技术是使用依赖注入框架,并根据代码是在混合或浏览器中执行,为外部服务提供不同的实现。因此,我将容器配置为在代码以混合方式执行时使用虚拟数据提供程序,这样就可以获得对列表框、数据网格等的设计时支持。

    挑战通常是如何声明性地设置DataContext,因此我经常使用服务定位器类A“前端”到IOC容器。这样我就可以将数据上下文绑定到服务定位器上的属性。

    另一种技术是创建某种具有两个属性的ObjectDatasource控件(非可视):设计时DataContext和运行时数据上下文。控件执行的任务是检测正在执行的位置,然后将父DataContext设置为正确的对象。

        2
  •  4
  •   Community CDub    7 年前

    我不确定能否回答你的问题,但我发现下面这篇文章很有价值。 Jonas Follesø 在设计/混合模式下使用ninject关闭服务。很不错的!

    http://jonas.follesoe.no/YouCardRevisitedImplementingDependencyInjectionInSilverlight.aspx

        3
  •  3
  •   Community CDub    7 年前

    I also agree with Jonas 关于带Silverlight的MVVM。我相信MVP也是一个不错的选择,但是最近我有时间用Silverlight同时尝试MVP和MVVM,而且我对MVVM的结果感到更高兴。(是的,我越是使用MVVM就改变了主意)。虚拟机从MVVM中的视图(显然)抽象出模型的绑定,这允许使用比MVP更多的绑定场景(至少更清洁的方法)。不过,这只是一个方面。

    我将在我的网站上发布一些MVP和MVVM的示例。

        4
  •  2
  •   Daniel Crenna    16 年前

    我已经尝试了一些选择,我将MVVM作为我的最佳选择。可混用性是一个重要的点,我也发现虚拟机方面直观的装配动态行为和程序效果和动画(如nikhil的silverlight.fx)。在某一点上,我试图避免通过流畅的界面完全混合,但是从长远来看,我发现UI和行为之间的耦合太痛苦了。我想在Blend中设计我的UI,然后在代码中添加效果和其他行为,这证明了这是迄今为止我能遵循的最佳模式。

        5
  •  2
  •   Community CDub    7 年前

    我认为我们中的许多人都在等待先驱者的到来,在Silverlight中使用MVVM(和WPF)创建真正好的示例应用程序。有许多棘手的方面,如 lack of ICommand in Silverlight interacting with animations 仅使用数据绑定启动和停止。

    不过,这绝对是一个观察未来的模式,如果你不介意偶尔在你不太明白的地方“作弊”,那就值得尝试一下。

        6
  •  2
  •   Jeff Handley    16 年前

    我喜欢ViewModel模式,并强烈推荐它。我的博客上有一些“开始使用ViewModel”类型的文章。

        7
  •  2
  •   Community CDub    7 年前

    I agree with Jonas . MVVM似乎是最适合我的模式(尽管约翰·帕帕认为MVP更有意义)。我在三月份发表了一篇关于这方面的MSDN文章,希望能为一个好的例子回答这个问题。

    顺便说一句,我想在MVVM框架部门看到一些内聚。目前还没有一个好的框架解决方案。我喜欢jonas(我认为jonas是fx框架),但由于它与wpf不兼容,对某些人来说可能不是正确的选择。

        8
  •  1
  •   Community CDub    7 年前

    我最近在几个不同的Silverlight项目上使用了MVVM,它运行得非常好,我肯定会推荐它。 Jonas's post 是个很好的开始的地方,我最近 blogged 在我的MVVM体验中,也创建了一个非常简单的解决方案来演示主要的接触点。

        9
  •  1
  •   Chris S    14 年前

    对MVVM模式有一个非常好的TechDays 2010视频介绍,清楚地解释了:

    对于需要更高程度自动化测试的更复杂的应用程序来说,这无疑是有意义的,而且从DependencyProperties到DataContext绑定的转变比它的ASP.NET对应的更为简洁。

    我发现Silverlight最大的挑战是测试实际的用户界面(我认为到目前为止有一个商业框架),以及在使用WCF服务(或与此相关的WebClient)和Silverlight时所遇到的巨大的事件调用纠结。

        10
  •  0
  •   Mike Two    16 年前

    我一直认为MVVM和PresentationModel http://martinfowler.com/eaaDev/PresentationModel.html 基本上是一样的。演讲模式更容易说。 我在Java Swing、Windows窗体、WPF和Silverlight中成功地使用了它。如果您从关注点分离的角度考虑,那么表示模型就非常有意义。你有一个班级,他们唯一关心的是提供一个演示友好的模型。用什么技术在屏幕上显示它真的不重要。它可能会更改一些实现细节,但无论您如何显示信息,将关注点分开都是一个好主意。 由于这种分离,不管视图技术如何,您都可以轻松地针对表示模型编写测试。所以这是一个优势。

        11
  •  0
  •   codingoutloud    16 年前

    随着P&P于2009年2月发布Prism V2,对MVVM的更好支持现在可用于Silverlight和WPF。见 microsoft.com/compositewpf 了解更多详细信息。

        12
  •  0
  •   Alex Burtsev    14 年前

    看看我在现实生活项目中关于MVVM和Silverlight的文章,然后自己决定。

    http://alexburtsev.wordpress.com/2011/03/05/mvvm-pattern-in-silverlight-and-wpf/