2011-01-09 52 views
0

我有簡單的SL用戶控件。一個列表框,顯示所有客戶以及右側列表框中SelectedItem(Customer)綁定的多個文本框和組合框。 SelectedItem綁定到SelectedCustomer屬性。Silverlight Twoway綁定和回滾更改 - 如何?

我正在尋找一種模式/方法來處理取消對客戶所做的更改(在綁定的文本框和組合框中)。

編輯控件(文本框和組合的)可以是一個或兩個綁定到列表框的selecteditem的方式。 如果雙向綁定,則文本框中的即時更改會反映在列表框中。如果它們是單向的,則文本框中的更改不會反映在SelectedCustomer對象中。

在編輯窗體的底部,我有典型的保存,取消,刪除按鈕。實例的保存按鈕將採用SelectedCustomer對象(如果雙向綁定,我將通過服務發送以保存在服務器上)。

如果文本框是一種方式綁定,我必須以某種方式捕獲文本框的值並插入到某個對象以發送到服務器進行保存。

如果我使用雙向綁定,並說保存操作失敗......我必須將SelectedCustomer值設置回原始值,否則客戶端現在繼續看到尚未保存的數據。

必須有處理這類情況的一個簡單的方法....

回答

0

帶有實體框架的RIA服務已經提供了這個功能,基本上RIA服務是如何工作的,你也可以像下面那樣做。

每個類實現了一個名爲IEditableObject的接口,它提供了BeginEdit/EndEdit和CancelEdit方法。並且它還存儲(複製)具有與從服務器加載的相同值的名稱爲「OriginalEntity」的同一類的實例。

在表單顯示用戶修改後,BeginEdit被調用,可能會在某種字典中使用反射緩存每個屬性。如果您調用CancelEdit,則將來自OriginalEntity的值加載回對象中。

在保存更改時出現一些錯誤,您可以從服務器刷新實體(最佳方式),也可以嘗試從OringalEntity屬性中加載屬性。

+0

好,所以我所做的是爲我的Customer類創建了一個部分類,即SL應用程序中的公共部分類Customer:IEditableObject。在提供的方法中,我提供了類似於http://www.silverlight.net/learn/tutorials/silverlight-4/web-services-and-silverlight/#Exercise3 – David 2011-01-09 21:27:11

0

我不會放棄用戶的變化,因爲這容易導致用戶受挫。恕我直言,用戶不應該被通知不受控制的數據回滾連接問題。

+0

確實,在我的特殊情況下,用戶正在點擊按鈕取消,因此我需要回滾編輯表單以及列表框中的編輯。 – David 2011-01-09 21:29:20

相關問題