如何使用Caliburn.Micro中的View结果调用ViewModel方法

时间:2015-05-21 13:46:44

标签: c# mvvm caliburn.micro

在我的Caliburn.Micro项目中,我有一个Window视图。

我在View中使用一些Invoke来调用ViewModel的方法:

private void ViewEvent1(object sender, RoutedEventArgs e)
{
  Caliburn.Micro.Action.Invoke(DataContext, "Event1Occured");
}

private void ViewEvent2(object sender, RoutedEventArgs e)
{
  Caliburn.Micro.Action.Invoke(DataContext, "Event2Occured");
}

他们工作得很好。

在我的视图中,我有一个关闭Window的方法:

private void EventClose(object sender, RoutedEventArgs e)
{
  this.DialogResult = false;      
  Close();
}

不幸的是,我必须在关闭生效之前检查ViewModel中的一些条件。

问题是Invoke返回 void ,因此我无法调用返回值的方法。

Invoke是否有替代方法可以从ViewModel的方法中获取结果?

1 个答案:

答案 0 :(得分:0)

你不想在视野中对视图模型进行方法调用。有点打破了CMs能力背后的想法,即使是你声称有效的项目。

作为 eran otzap 指出你需要使用约定或Message.Attach,从视图调用viewmodel上的方法是打破一些事情,在这种情况下不妨使用CM。有些人会完全删除文件背后的代码,因为他们根本不会使用它们。

其次,如果它的视图相关,则它不会影响视图模型,但是由于您正在调用视图模型,因此抛出SoC和MVVM的前提并且测试变得非常困难。

调用很糟糕,事件通过可能稍好一些,但仍需要一些非常臭的代码才能完成。

caliburnmicro.com上的文档非常清楚,github存储库中的示例非常适用于CM使用的理想。