2009-11-12 85 views
0

我有一個ViewModel其中的一個功能是與服務交談並獲取一些數據。但是,如果出現問題,我想通知用戶該服務無法運行。MVVM觸發事件回到查看

目前我所做的是觸發視圖訂閱的事件(我的viewModel在視圖的資源部分創建)並在視圖事件處理程序中接收事件我只是做一個Windows.Alert() 。

首先,我想,以減少代碼的代碼量視圖的後面,與該事件觸發,必須有一個更好的方式來做到這一點?

其次,由於我的看法知道(在資源節中創建即)我的視圖模型,我相信這將導致測試我的觀點的問題。這是做到這一點的正確方法嗎? JDD。

JD。

回答

1

最好在這裏使用的服務。服務只是通過一個接口提供一些功能。

public interface IDialogService { 
    void ShowNotifictation(string message); 
} 

視圖模型藉此服務並使用它來顯示通知。然後,此服務的實施對您的解決方案而言是特定的,並且可以顯示您想要的通知。

+0

視圖是否會實現IDialogService? – 2009-11-13 11:10:03

+0

不,不。您只需實施該服務,然後將其放入您的IOC容器中。 ViewModel應該能夠從那裏檢索它。 – 2009-11-13 12:24:11

+0

對不起,誤解,好吧,我有服務註冊在我的IoC容器中。視圖模型將其注入或可以檢索服務,然後調用ShowNotification()。現在這個方法調用的代碼是什麼樣的(它是否創建一個對話框和調用show)? – 2009-11-13 14:14:10

1

這種服務的實現可能是這樣的:

[Export(typeof(IMessageService))] 
public class MessageService : IMessageService 
{ 
    public void ShowMessage(string message) 
    { 
     MessageBox.Show(message); 
    } 
... 

它使用MEF作爲IOC容器。該服務通過導出屬性註冊爲IMessageService。

您可以查看WPF Application Framework (WAF)以查看使用此服務的完整實施和示例應用程序。

希望這會有所幫助。

jbe

+0

感謝您的代碼。 – 2009-11-18 11:04:39