我需要UI中的bindingList来提供我的集合和数据杂志之间的双向数据指标。但是,从您的业务层(或域层,服务层,数据层等)返回BindingList似乎是不正确的。也就是说,由于UI的要求,我只会使用bindingList,现在此UI需要与我的域层相连。

做到这一点的“正确”解耦方法是什么?我应该返回iList,然后将其复制成绑定列表以进行演示目的?从现实世界的角度来看,这间间接费用值得吗?

有帮助吗?

解决方案

我认为域层将返回更多通用类型以及它们是否正在通知(ObservableCollection<>) 或不 (IEnumerable<> 或者 IList<>)根据要求。

如果需要该功能,则UI层可以按照他们的意愿(或不愿意)处理将它们处理到IbindingList中。

我们已经使用过 BINDABLELINQ 取得巨大的成功,以实现UI层通知/同步绑定列表(可能使用过滤器)的目标。

其他提示

没有iList的副本(至少我希望您真的不想创建复制/克隆)。您通常要做的就是在同一iList对象上创建另一个参考。因此,返回iList对象没什么不好的。

您可以返回一个列表对象,并将其从bindingList(位于UI中)中引用。

在我看来,最好将iList(列表,hashtable ASO)对象返回bindingList,因为您可能会在不同的UIS上使用前者(控制台,Web,Win,Service)。例如,在Web应用程序中,使用BindingList不会有任何优势。

我不知道什么是“正确”的方式,但是我过去曾使用过像CSLA这样的框架,而且我知道它使用了bindinglist,现在是业务列表的observableCollection。这非常简单地使用UI中的业务对象制成,因为在从列表中添加或删除项目时,UI将更新。如果您返回iList,然后将其复制到bindingList中,则需要手动监视和处理对ILIST的更改并将其转换为BindingList。我的个人偏爱是在可能的情况下拥有一个丰富的功能业务层,该业务层将使用bindinglist或ObservableCollection将业务层呈现给UI。

如果您希望UI元素在不实施自己的活动处理程序的情况下编辑业务模型,则业务模型必须具有bindinglist。

每当您做类似的事情 new BindingList<MyWidget>( list ) 您正在将绑定从根列表中分离出来。如果对项目进行了编辑,则所有内容都可以正常工作,但是添加和删除将不会反映在原始列表中。

我最近尝试通过利用BindingList来实施这样的事情 ListChanged 事件,它更新了我的模型以反映绑定清单的更改,但是如果控制器更改了模型,则不会更新UI中的bindinglist。

您可以每次从列表中添加或删除物品时都会为您的列表生产特殊的登记器,但这只是重新发明了带有更多开销的BindingList轮。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top