41

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

我听说由 WPF 开发社区发起的 MVVM 模式也有助于保持 Silverlight 控件“可混合”。我仍在纠结它,但这里有一些解释:

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

4

12 回答 12

32

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

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

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

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

于 2008-12-19T09:21:54.293 回答
4

我不确定我是否能回答你的问题,但我发现下面的文章非常有价值。Jonas Follesø在设计/混合模式下使用 ninject 来切换他的服务。非常好!

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

于 2008-12-17T17:25:33.663 回答
3

我也同意 Jonas关于使用 Silverlight 的 MVVM 的观点。我确实相信 MVP 也是一个不错的选择,但最近我有时间尝试使用 Silverlight 的 MVP 和 MVVM,我对 MVVM 的结果更满意。(是的,我使用 MVVM 越多,我就改变了主意)。VM 从 MVVM 中的视图(显然)抽象了模型的绑定,这允许比 MVP 更多的绑定场景(至少更简洁的方式来完成它们)。不过,这只是一方面。

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

于 2009-01-08T04:35:56.590 回答
2

我已经尝试了一些选项,并且我决定将 MVVM 作为我的最佳选择。可混合性是很重要的一点,我还发现 VM 方面对于装配动态行为、程序效果和动画(如 Nikhil 的 Silverlight.FX)很直观。有一次,我试图通过流畅的界面完全避免 Blend,但从长远来看,我发现 UI 和行为之间的耦合太痛苦了。我想在 Blend 中设计我的 UI,然后在代码中添加效果和其他行为,这被证明是迄今为止我遵循的最佳模式。

于 2008-12-17T20:13:59.953 回答
2

我认为我们中的许多人都在等待开拓者继续前进,并使用 Silverlight 中的 MVVM(以及就此而言的 WPF)创建非常好的示例应用程序。有许多棘手的地方,例如Silverlight 中缺少 ICommand ,或者仅使用数据绑定与动画开始和停止进行交互的困难。

不过,这绝对是一种值得关注的模式,如果你不介意偶尔在你无法弄清楚的地方“作弊”,那么值得一试。

于 2008-12-24T23:18:08.763 回答
2

我同意乔纳斯。MVVM 似乎是最适合我的模型(尽管 John Papa 认为 MVP 更有意义)。我有一篇关于这方面的 MSDN 文章将于 3 月发布,希望能响应号召,提供一个很好的例子。

顺便说一句,我希望在 MVVM 框架部门看到一些凝聚力。目前还没有一个好的框架可以遵循的解决方案。我喜欢 Jonas(我认为 Jonas 是 FX 框架),但由于它不兼容 WPF,因此它可能不是某些人的正确选择。

于 2008-12-27T13:07:52.957 回答
2

我喜欢 ViewModel 模式并强烈推荐它。我的博客上有几篇“ViewModel 入门”类型的帖子。

于 2009-01-10T05:51:57.507 回答
1

我最近在几个不同的 Silverlight 项目中使用了 MVVM,它运行得非常好,我肯定会推荐它。 Jonas 的帖子是一个很好的起点,我最近也写了一篇关于我的 MVVM 体验的博客,并创建了一个非常简单的解决方案来演示主要接触点。

于 2008-12-20T13:55:57.077 回答
1

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

对于需要更高程度的自动化测试的更复杂的应用程序,这绝对是有意义的,并且从 DependencyProperties 到 DataContext 绑定的转变比它的 ASP.NET 对应项要简洁得多。

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

于 2010-04-28T13:23:40.060 回答
0

我一直认为 MVVM 和 PresntationModel http://martinfowler.com/eaaDev/PresentationModel.html本质上是一回事。PresentationModel 说起来容易得多。我已经在 java swing、windows forms、WPF 和 silverlight 中成功使用了它。如果您从关注点分离的角度考虑,则表示模型很有意义。你有一个类,它唯一关心的是提供一个演示友好的模型。使用什么技术在屏幕上显示它真的无关紧要。它可能会更改一些实现细节,但无论您如何显示信息,将关注点分开是一个好主意。由于这种分离,无论视图技术如何,您都可以轻松地针对您的演示模型编写测试。所以这是一个优点。

于 2008-12-20T14:13:10.753 回答
0

随着 2009 年 2 月 P&P 发布的 Prism v2,Silverlight 和 WPF 现在可以更好地支持 MVVM。有关详细信息,请参阅microsoft.com/compositewpf 。

于 2009-02-22T23:52:50.783 回答
0

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

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

于 2011-03-05T19:05:30.497 回答