2014-02-25 123 views
0

我有一種情況,我認爲應該做的有關UI的東西(例如序列化UI佈局或COM調用,...)我得到結果想要發送消息並從我的ViewModel的UI中獲取計算結果。我如何從消息發送中獲取輸出?如何從視圖中視圖模型在MVVMLight(調用鏈從視圖模型開始)

1-使用回調方法作爲Message的參數並從視圖中回調它。

2-放入視圖模型的屬性,並響應於在查看消息呼叫設置該屬性。

我更喜歡第一個,是不是?任何其他方式?

似乎並不清楚,但在視圖模型調用鏈開始意味着我需要模擬像一個函數調用形式視圖模型查看和得到這個調用的結果。

+0

你可以在你的代碼後面編寫代碼(this.DataContext作爲yourViewmodel)。你的方法 –

+0

@DhavalPatel調用從ViewModel啓動 – Mojtaba

+0

然後你可以使用消息服務,當從Viewmodel開始調用時,你必須發送消息並註冊該消息。 –

回答

2

我會在這裏做的很簡單:只需從您的視圖調用ViewModel的方法。


編輯:

我不是在MVVM消息的忠實粉絲,我往往更喜歡事件。所以我使用的簡單方法是:

  • ViewModel公開了一個公共事件。
  • 該視圖附加一個處理程序到ViewModel的事件。
  • 視圖模型引發事件
  • 視圖將執行處理程序(代碼隱藏),並且:
    • 調用視圖模型
    • 調用包含在事件處理程序的EventArgs的參數回調的公共方法

如果你不喜歡的活動,喜歡的消息,這是一樣的:它的回調VS公共方法/屬性(在這裏我會永遠喜歡方法 vs 屬性設置器,因爲我不喜歡在setter中添加硬邏輯和異常管理)。

所以要回答這個問題:我會選擇更簡單的IMO公開方法。

+0

問題是,ViewModel啓動調用鏈,該過程從VM – Mojtaba

+0

@Mojtaba_Sarooghi開始我編輯了這個問題,請看看 – ken2k

1

爲了訪問活性-X/COM控制I趨於具有在其上得到由在代碼視圖時控制加載後面設置的VM控制基準。虛擬機可以直接調用任何方法。

不理想,但Active-X不適合MVVM,因爲它包含視圖和邏輯。

+0

只是不適用於COM 但通常似乎沒有任何其他好方法來模擬函數調用在MVVM中有返回值 – Mojtaba

+0

這是因爲你不應該這麼做。 MVVM的重點在於VM對視圖實現一無所知。 – GazTheDestroyer

+0

@GazTheDestroyer你確實需要OP要求的那種溝通。最基本的用例是確認彈出窗口。 – ken2k

0

您可以像使用

消息服務聲明一個類

public class HandleClass 
{ 
    public object Obj{get;set;} 
    public HandleClass(object _obj) 
    { 
    Obj=_obj; 
    } 
} 

現在發送郵件從您的視圖模型

Messanger.Default.Send<HandleClass>(new HandleClass(){Obj=AssignedValue}); 

現在收到你想要的對象信息的消息

Messanger.Default.Register<HandleClass>(this,ReceivedInformation) 
private Void ReceivedInformation(HandleClass handle) 
{ 
you can get the Obj object with full of information you can access like 
var abc=handle.Obj; 
} 
+0

這個我怎麼可以發送消息,但是我想從消息處理器返回信息,返回值 – Mojtaba

+0

然後你可以使用Callback –