我的自定义控件有单独的库(Controls.DLL)。 我有另一个库(Model.dll)和我的数据访问代码。
某些控件确实需要访问数据。我想保持这些库松散耦合。基本上,我想在不引用Model.dll的情况下访问数据
这样做的正确方法是什么?当然,我认为Binding是一种可行的方式。但它不只是绑定到数据,我还需要针对我的模型执行操作(retreive数据,分页,过滤)。我需要研究我的模型包含的元数据。
例如,我的Customer类的属性类似于" FirstName"," LastName"等等。但是我希望这些属性显示在我的控件中,并带有#34;名字","姓氏"。这是一个原始的例子,但它显示了我的观点。
我的另一个想法是让#34;提供商"在数据方面会吐出XML并在控制方面我会解析这个XML。但是我该如何处理方法?
另一个想法是反思。这样我就可以将对象传递给Control。但我对反思并不是很好,也不确定我是否可以达到以下目的:获取属性/属性。获取和执行方法?这对于使用Interfaces进行编码听起来是完美的,但接口需要存在于某个地方,因此需要引用某些东西。
那么,像这样松散编码的最佳方法是什么?
答案 0 :(得分:1)
查看MVVM模式(Model-View-ViewModel)。
基本上,ViewModel包装Model,并通过属性绑定将数据访问和数据操作命令公开给用户界面(View)。
通过搜索MVVM,您将找到大量文档,教程等。或者查看此StackOverflow answer以帮助您入门。
<强>更新强>
MVVM允许您分离自定义控件和数据。听起来您希望根据模型中的数据动态生成界面组件。你可以在MVVM中做到这一点(当然,这不是唯一的方法)。视图模型可以基于模型动态生成集合。视图模型可以包括用于将原始数据转换为显示数据的方法。这意味着您的模型或控件(视图)都不需要知道如何操作 这样做。
根据数据的性质,您可以选择让“通用”视图模型反映属性名称以程序生成显示名称(如原始示例中所示),或者您可以选择为特定数据编写特定视图模型在你的模型中。这取决于数据的性质。无论哪种方式,您的自定义控件(在视图中)仍然与模型分离。
更新2:
您的视图模型不需要与视图(控件)位于同一个程序集中。您甚至可以将它们放入第三个程序集中(如here所述)。当然,这会鼓励您更严格地遵循MVVM并确保您没有从ViewModel到View的依赖关系,但这是一件好事。关于将视图连接到查看您可能遇到的模型here的问题,还有一些提示。