我的情况是我的视图应该执行与UI相关的操作(例如序列化UI布局或COM调用,...)我想发送消息并从我的ViewModel.So中的UI获取该计算。如何从消息发送中获取输出?
1-使用回调方法作为Message的参数,并从视图中回调它。
2-在ViewModel中放置一个属性,并设置此属性以响应View中的消息调用。
我更喜欢第一个,是不是?任何其他方式?
似乎不清楚但是ViewModel中的调用链启动意味着我需要模拟类似于函数调用形式ViewModel来查看并获取此调用的结果。
答案 0 :(得分:2)
我会在这里做得非常简单:只需从View中调用ViewModel的方法。
编辑:
我不喜欢MVVM中的消息,我经常喜欢事件。所以我将使用的简单方法是:
如果您不喜欢事件并喜欢消息,那就是相同的:它是回调与公共方法/属性(这里我总是更喜欢方法 vs 属性设置器,因为我不喜欢在setter中添加硬逻辑和异常管理。)
所以回答这个问题:我会选择更简单的IMO公共方法。
答案 1 :(得分:1)
为了访问active-X / COM控件,我倾向于在VM上有一个控件引用,当控件加载时,该控件引用由代码中的视图设置。然后,VM可以直接调用任何方法。
不理想,但Active-X不适合MVVM,因为它包含视图和逻辑。
答案 2 :(得分:0)
您可以使用
等信息传递服务宣布一个班级
public class HandleClass
{
public object Obj{get;set;}
public HandleClass(object _obj)
{
Obj=_obj;
}
}
现在从ViewModel发送消息
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;
}