2011-08-12 44 views
1

是否有可能更新數據網格中的數據,而無需將其綁定到特定的對象並仍然享受「雙向」數據綁定的好處?在這種情況下,基於用戶輸入在運行時決定要綁定的對象的類型。沒有數據綁定的情況下將數據更新到datagrid

一些更清晰:

其實我使用了多線程應用程序,我需要從另一個線程更新UI數據。爲此,我共享一個Observable Collection對象的引用,並將其綁定(通過ItemsSource)與數據網格相同。現在,只要線程更新數據,它就會在UI線程中調用一個特定函數,要求它刷新數據網格。當我嘗試修改網格中的某個值以便將其發送回並行運行的線程時,會出現問題。它引發一個異常,「AddNew或EditItem事務中不允許使用」DeferRefresh「。」

回答

1

使用DataGridView,您可以在運行時更改數據源,並仍然享受雙向綁定...只需將DataSource先設置爲空。如果由於某種原因你不能這麼做,你可能會考慮對象組合:即將你的網格綁定到一箇中間對象,該對象只是在運行時爲你綁定的實際對象保存一個變量,然後創建包裝器(IList,IListSource,IBindingList或IBindingListView)。

除非我錯過了什麼?

0

您可以動態創建用戶輸入

比其他的基地在運行時雖然代碼結合我不認爲會有任何的方式來實現雙向無數據綁定綁定。一旦醜陋的方式可以處理itemssource和DataGrid中的數據更改事件和事件更新另一個控件即數據網格,如果在dataGrid中更改值時更改itemssource和itemssource,則手動

+0

我正在這樣做,並要求如果其他階梯我需要使用數據。我在想如果有辦法創建某種基類派生類的層次結構,並有動態綁定(這是正確的術語?)扮演如果其他結構的一部分。 – Manoj

+0

我不知道你的場景的具體細節,但是如果你可以把碎片正確地連接在一起,那麼這將是一個更清潔的解決方案。 –

0

當您設置(不綁定)ItemsSource,綁定通過DataGrid的內部實現自動發生在行和單元級別。所以我不能理解「怎麼樣」,我們不能將一個對象綁定到數據網格,並享受它的雙向更新。

無論如何,當你設置ItemsSource的時候會發生......或者你不想要設置ItemsSource嗎?

+0

其實我正在使用多線程應用程序,我需要從另一個線程更新UI中的數據。爲此,我共享一個Observable Collection對象的引用,並將其綁定(通過ItemsSource)與數據網格相同。現在,只要線程更新數據,它就會在UI線程中調用一個特定函數,要求它刷新數據網格。當我嘗試修改網格中的某個值以便將其發送回並行運行的線程時,會出現問題。它引發一個異常,「AddNew或EditItem事務中不允許使用」DeferRefresh「。」 – Manoj

相關問題