在我的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的方法中获取结果?
答案 0 :(得分:0)
你不想在视野中对视图模型进行方法调用。有点打破了CMs能力背后的想法,即使是你声称有效的项目。
作为 eran otzap 指出你需要使用约定或Message.Attach,从视图调用viewmodel上的方法是打破一些事情,在这种情况下不妨使用CM。有些人会完全删除文件背后的代码,因为他们根本不会使用它们。
其次,如果它的视图相关,则它不会影响视图模型,但是由于您正在调用视图模型,因此抛出SoC和MVVM的前提并且测试变得非常困难。
调用很糟糕,事件通过可能稍好一些,但仍需要一些非常臭的代码才能完成。
caliburnmicro.com上的文档非常清楚,github存储库中的示例非常适用于CM使用的理想。