在我的Caliburn。微项目我有一个窗口视图。
我使用一些调用视图中的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");
}
它们工作得很好。
在我的视图中,我有一个方法来关闭窗口:
private void EventClose(object sender, RoutedEventArgs e)
{
this.DialogResult = false;
Close();
}
不幸的是,在关闭生效之前,我必须检查ViewModel中的一些条件。
问题是调用return void,所以我不能调用返回值的方法。
是否有一个替代调用从ViewModel的方法获得结果?
你不想从视图中调用viewmodels的方法。有点打破了CMs能力背后的想法,即使是你声称有效的项目。
as eran otzap指出您需要使用约定或消息。另外,从视图调用视图模型上的方法会破坏一些东西,在这种情况下还不如不使用CM。有些人甚至会完全删除文件后面的代码,因为他们根本不使用它们。
其次,如果它与视图相关,那么它不会影响视图模型,但由于你正在调用视图模型,SoC和MVVM的前提被抛出,测试变得非常困难。
调用是不好的,事件传递可能稍微好一点,但仍然需要一些非常臭的代码来完成。
caliburnmicro.com上的文档非常清晰,github存储库上的示例对于CMs使用的理想非常彻底