2011-08-17 68 views
1

我的大腦陷入困境,試圖解決我遇到的問題,一些幫助將走很長的路。更新WPF/WCF應用程序中的幾個數據綁定用戶控件

我有一個應用程序從WCF服務下載數據結構,並將數據存儲在可觀察的集合屬性中。我有一個包含網格的用戶控件,並綁定在用戶控件initilizer上或通過一個x:Static數據綁定。用戶控件或可觀察集合屬性可以在同一臺機器上多次訪問。

如果我有多個用戶控件實例打開並使用網格修改記錄,我將更改發送到WCF服務,該服務修改SQL數據庫向修改的對象添加幾位並將其傳回給WPF (可能在未來通過回發到其他客戶端應用程序)應用程序和網格更新。但它只會更新一個特定的usercontrols網格。

如果我強制其他用戶控件網格重新綁定,那麼數據更改會反映出哪些不是我想要的。所以我決定使用LINQ在可觀察集合中找到要修改的對象,然後使用IList.IndexOf將對象添加到集合中,然後刪除舊對象。做這種方法似乎工作正常,但我一直在閱讀,有一個更好的方法來實現這一點。

任何人都可以幫助闡明我想要實現的目標,或者我已經完成了通知所有綁定網格的更改的唯一方法是做到這一點,我的所有屬性都實現了inotifypropertychanged上的值。提前

+0

誰承載了ObservableCollection? – PVitt 2011-08-17 12:57:05

+0

ObservabeCollection是使用存儲在SQL數據庫中的數據從WCF服務生成的,該數據庫被髮送到應用程序,並作爲靜態類存儲在客戶端計算機上的靜態類中,作爲網格綁定的本地緩存副本 – 2011-08-17 13:03:06

回答

1

由於集可以通過WCF服務創建,並移交給一個靜態類提供訪問它。網格綁定到這個靜態類。

根據您的意見,我不得不重寫我的雁:

你有一個靜態屬性網格必然。如果將新集合分配給此屬性,則網格仍然綁定到舊網格,因此它們不會更新,因爲從他們的角度來看沒有任何更改。

如果更改集合中的一個項目,則更改了項目而不是集合。所以綁定的網格不會更新,因爲從他們的角度來看沒有任何改變。

當您希望更新網格時,您必須在添加所有收集項目時註冊ChangedEvent-Handler。每次處理器被調用時,因爲您更改了集合中的一項,您必須觸發更新的網格。

這通常由包裝集合(模型)的視圖模型完成。網格綁定到這個視圖模型,它負責通知網格(視圖)的任何變化。看看MVVM設計模式,它將爲您提供解決問題的標準方法。