2

我需要的BindingList在我的UI提供本人收集和一个DataGridView之间的双向数据绑定。但是,从业务层(或域层,服务层,数据层等)返回BindingList似乎并不正确。也就是说,我只会因为UI需求而使用BindingList,现在这个UI需求会与我的领域层相结合。如果您返回从业务层(或服务层,领域模型等)的BindingList?

什么是“正确的”脱钩的方式来做到这一点?我应该返回一个IList,然后将其复制到BindingList中以用于演示目的?从现实世界的角度来看,这个开销是否值得?

+0

这个问题实际上会导致我失望的寻找到使用MVVM与WPF的路径。我只是进入它,但我喜欢它。 – User 2011-02-18 22:27:15

回答

0

我认为领域层会返回更通用的类型,以及他们是否通知(ObservableCollection<>)或不(IEnumerable<>IList<>)是否符合要求。

UI层可以处理tranforming他们,因为他们希望(或不)到IBindingList的,如果他们需要这个功能。

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

1

我不知道“正确”的方式是什么,但我已经在过去使用类似CSLA框架和我知道,它采用了的BindingList和现在的业务列表一个ObservableCollection。这使得在UI中使用业务对象变得非常简单,因为当项目被添加或从列表中移除时UI将会更新。如果您返回一个IList并将其复制到BindingList中,则需要手动监视和处理对IList的更改并将其转换为BindingList。我个人的偏好是在可能的情况下有一个功能丰富的业务层,它将使用BindingList或ObservableCollection将业务层呈现给UI。

+0

我想我的问题是,如果你通过网站公开相同的数据,那么绑定列表在Web上下文中没有(或有限)使用。 – User 2011-01-24 01:42:12

2

没有一个IList的复制(至少我希望你并不真的想创建一个拷贝/克隆)。你通常所做的就是在同一个IList对象上创建另一个参考。所以返回一个IList对象并不是什么坏事。

你可能例如返回一个List对象并从bindingList(它位于你的UI中)引用它。

在我看来,最好是返回一个IList(List,HashTable aso)对象而不是BindingList,因为您可以在不同的用户界面(Console,Web,Win,Service)上使用前者。例如。使用bindingList在Web应用程序中没有任何优势。

+0

在WinForms中使用带有DataGridView的IList,您如何建议IList中的更改反映在UI中? – User 2011-01-13 19:34:36

0

如果你想在UI元素,而无需实现自己的事件处理程序来编辑业务模式,商业模式必须有一个的BindingList。

任何时候,你这样做new BindingList<MyWidget>(list)你是去耦从根目录的绑定。如果项目被编辑,它将一切正常,但添加和删除不会反映在原始列表中。

我最近试图通过点击BindingList ListChanged事件来实现这个事件,该事件更新了我的模型以反映BindingList更改,但是如果模型被控制器更改,它不会更新UI中的BindingList。

你可以产生特殊的存取您的名单引发事件每次添加或删除列表中的项目的时候,但是这仅仅是重新发明轮子的BindingList与更多的开销。