2008-12-17 97 views
41

Silverlight控件的一个挑战是,当属性绑定到代码时,它们在Blend中不再是真正可编辑的。例如,如果您有一个从数据馈送填充的ListView,则在编辑Blend中的控件时没有可见的元素。我应该在Silverlight项目中使用Model-View-ViewModel(MVVM)模式吗?

我听说WPF开发社区发起的MVVM模式也可以帮助保持Silverlight控件“可混合”。我还在我的包裹在其周围的头,但这里有一些解释:

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

+0

我也建议你使用国际奥委会,卡利-Micro和Ninject作出真棒组合。 – 2010-12-14 18:59:26

回答

32

我绝对认为您应该为Silverlight应用程序使用MVVM模式 - 并且该模式的好处之一是您可以通过一些简单的技术真正使您的应用程序真正可混合。我经常将“可混合性”称为“可设计性设计” - 您使用某些技术来确保您的应用在Blend中看起来很棒。

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

挑战在于如何通过声明设置DataContext - 所以我经常最终将服务定位器类用作IoC容器的“前端”。这样我可以将数据上下文绑定到服务定位器上的一个属性。

另一种技术是创建某种ObjectDataSource控件(非可视化),它具有两个属性:Design Time DataContext和RunTime Data Context。该控件执行检测执行的位置,然后将Parent DataContext设置为正确的对象。

2

我已经尝试了几个选项,我安定在MVVM对我来说是最好的选择。可混合性是一个重要的观点,我还发现虚拟机方面直观地展现了动态行为和过程效果和动画(如Nikhil的Silverlight.FX)。有一次,我试图通过流畅的界面完全避免Blend,但是从长远来看,我发现UI和行为之间的耦合太痛苦了。我想在Blend中设计我的UI,然后在代码中添加效果和其他行为,这被证明是我迄今为止最好的模式。

1

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

0

我一直以为MVVM和PresntationModel http://martinfowler.com/eaaDev/PresentationModel.html本质上是一回事。 PresentationModel说起来容易多了。 我已经在java swing,windows窗体,WPF和silverlight中成功地使用了它。如果您从分离关注的角度考虑,演示模型具有很大意义。你有一个课程,只关心提供一个适合演示的模型。用什么技术在屏幕上显示它并不重要。它可能会改变一些实现细节,但不管如何显示信息,拆分关注点都是一个好主意。 由于这种分离,无论视图技术如何,您都可以轻松地针对演示文稿模型编写测试。所以这是一个优点。

2

我想我们中的很多人都在等待开拓者前进,并在Silverlight中使用MVVM(和WPF)创建真正优秀的示例应用程序。有许多棘手的领域,例如lack of ICommand in Silverlight,或interacting with animations仅使用数据绑定启动和停止的难度。

它绝对是一种可以预见未来的模式,值得一试,如果你不介意在你无法弄清楚的地方偶尔作弊。

2

I agree with Jonas。 MVVM似乎是最适合我的模式(尽管John Papa认为MVP更有意义)。我在3月份发布了一篇关于这个MSDN的文章,希望能够为这个呼吁做一个很好的例子。

顺便说一句,我想在MVVM框架部门看到一些凝聚力。现在还没有一个好的解决方案来实现框架。我喜欢Jonas'(我认为Jonas'是FX框架),但由于它不是WPF兼容,它可能不是一些正确的选择。

3

I also agree with Jonas关于MVVM与Silverlight。我相信MVP也是一个不错的选择,但是最近我有时间尝试使用Silverlight的MVP和MVVM,并且我对MVVM的结果感到高兴。 (是的,我改变了我的想法,我用MVVM越多)。 VM从MVVM中的View(显然)中抽象出Model的绑定,允许使用更多的绑定方案(至少可以使用更简洁的方法来完成),而不是使用MVP。不过,这只是一个方面。

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

1

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

对于需要更高程度的自动化测试更加复杂的应用程序无疑是有道理的,从DependencyProperties到DataContext绑定的转变比ASP.NET的更为简单。

我在Silverlight中遇到的最大挑战是测试实际的UI(到目前为止,我认为有一个商业框架),以及在使用WCF服务(或WebClient)时遇到的大量事件调用)与Silverlight。

相关问题