在Silverlight中保持控制和数据的松散耦合

本文关键字:数据 耦合 控制 Silverlight | 更新日期: 2023-09-27 18:13:14

我有单独的库(Controls. dll)与我的自定义控件。我有另一个库(Model.dll)与我的数据访问代码。

一些控件确实需要访问数据。我希望这些库保持松散耦合。基本上,我想访问数据而不引用Model.dll

正确的做法是什么?当然,我认为绑定是一种可行的方法。但这不仅仅是绑定到数据,我还需要对模型执行操作(检索数据、分页、过滤)。我需要研究模型中包含的元数据。

例如,我有一个Customer类,它具有"FirstName"、"LastName"等属性。但我希望这些显示在我的控件内的标题,如"First Name","Last Name"。这是一个原始的例子,但它似乎表明了我的观点。

我的另一个想法是在数据端有"提供者",它会吐出XML,在控制端我将解析这个XML。但是我该如何使用方法呢?

另一个想法是使用反射。这样我就可以把object传递给Control。但我不与反射一样好,不确定我是否能实现这样的事情:获得属性/属性。获取和执行方法?这听起来像是用接口编码的完美事情,但是接口需要存在于某个地方,因此某些东西必须引用某些东西。

那么,像这样松散地编写代码的最好方法是什么呢?

在Silverlight中保持控制和数据的松散耦合

查看MVVM模式(Model-View-ViewModel)

基本上,ViewModel封装了一个Model,并通过属性绑定向用户界面(视图)公开数据访问和数据操作命令。

通过搜索MVVM,你会发现大量的文档、教程等。或者看看这个StackOverflow的答案,让你开始。

更新:

MVVM允许您分离自定义控件和数据。听起来您想要基于模型中的数据动态地生成接口组件。您可以在MVVM中做到这一点(当然,这不是唯一的方法)。视图模型可以基于模型动态地生成集合。视图模型可以包含将原始数据转换为显示数据的方法。这意味着您的模型或控件(视图)都不需要知道如何这样做。

根据你的数据的性质,你可以选择让"通用"视图模型反映属性名来程序地生成显示名(就像你的原始示例一样),或者你可以选择为你的模型中的特定数据编写特定的视图模型。这取决于数据的性质。无论哪种方式,您的自定义控件(在视图中)仍然与模型解耦。

更新2:

视图模型不需要与视图(控件)位于同一个程序集中。您甚至可以将它们放在第三个组件中(如下所述)。当然,这鼓励您更严格地遵循MVVM,并确保您没有从ViewModel到View的依赖关系,但这是一件好事。关于将视图连接到视图模型的问题,这里有一些更多的提示。