2014-02-25 121 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 –