2011-07-26 53 views
3

使用MVVM編寫WPF應用程序時,我想使用WCF服務,並使用其上的方法從應用程序數據庫提供相關數據。使用WCF服務作爲使用MVVM設計模式的WPF應用程序中的模型

舉個例子,如果我的系統有一個任務列表,它們存儲在一個SQL數據庫中。我可以在Web服務上放置一個方法來從數據庫中檢索所有任務。

我可以調用從一個ViewModel這種方法和結果存儲在

public List<Task> Tasks { get; set; } 

那我就結合我查看到該物業的控制。

當Tasks屬性發生變化時(我沒有把它放在上面來保持示例簡單),我已經有了一些適合View的更新。

我的問題是,當一個新任務被其他人添加到數據庫時,我該如何更新ViewModel上的Tasks屬性?

我是否需要每隔x分鐘輪詢一次數據庫以查找新任務(通過WCF服務上的方法)?

或者我可以以某種方式做任何事情,當任務添加到數據庫時將更新任務屬性?

回答

1

您需要執行某種輪詢才能完成此項工作。由於所有更改都發生在WPF應用程序的內存中,所以直接更新ViewModel中對數據所做的更改(通過綁定)。但是,對數據庫的更改只會被數據庫所瞭解。

您可能需要向WCF服務添加一個方法,該服務需要DateTime,該方法將返回自給定時間以來添加的所有任務。然後,從您的ViewModel調用該方法,其頻率適合您的使用場景和預期的數據更新速率。那時,任何添加的新聞任務都應該反映在你的視圖中。

4

你可以使用Publish Subscribe Framework for WCF Services來實現這個功能。這允許您的WPF應用程序訂閱來自WCF服務器的更新。當有新數據可用時,服務器將調用由WPF應用程序提供的WCF服務。然後,您可以使用新數據更新您的視圖模型。如果您的WCF服務也控制商店到數據庫,那麼您可以簡單地捕獲所做的更改,並將通知發送給訂閱的WPF客戶端。

0

您可以使用CQRS approach,具體取決於應用程序。如果應用程序是簡單的CRUD,那麼它可能不值得,但如果你正在構建一個更復雜的領域模型或尋找顯着的可伸縮性,這可能是值得研究的。 CQRS基本上將你的命令從你的查詢中分離出來。在你的場景中,你可能會將實際的ViewModel存儲在數據庫中,客戶端直接從那裏獲取它們,而無需通過WCF。您還可以讓您的客戶訂閱域事件以使其能夠根據需要動態刷新。

相關問題