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與更多的開銷。