silverlight - 我应该在 Silverlight 项目中使用模型- View - View 模型 (MVVM) 模式吗?

标签 silverlight design-patterns mvvm

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

我听说由 WPF 开发社区发起的 MVVM 模式也可以帮助保持 Silverlight 控件的“可混合性”。我仍然对此很困惑,但这里有一些解释:

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

最佳答案

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

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

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

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

关于silverlight - 我应该在 Silverlight 项目中使用模型- View - View 模型 (MVVM) 模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/375301/

相关文章:

silverlight - 从 ItemsControl.ItemTemplate 绑定(bind)到 View 模型属性

silverlight - Lightswitch : Load operation failed for query 'GetAuthenticationInfo' . 远程服务器返回错误:NotFound

.net - 如何在 Silverlight 中的页面之间传递对象?

c# - C# 中的单例线程安全 - 为什么要添加双重检查?

android - 如何修复 android 架构组件分页 onItemAtEndLoaded 进入循环?

silverlight - 如何在两个(或更多)XAML 文件之间共享 VisualStateManager?

c++ - 为了方便起见,我应该避免公开私有(private)字段变量吗?

c# - 为什么.NET 没有像Java 那样内置观察者模式?

c# - 我的用户控件上的所有基本属性是否都需要依赖属性?

mvvm - 带有ZK框架的MVVM