2015-05-21 121 views
1

在我的Caliburn.Micro项目中,我有一个Window视图。如何使用Caliburn.Micro中的View调用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的方法得到结果?

+0

发布你的XAML。 更多声明属性bool CanEventClose {get; } 根据caliburn的命名约定 –

+0

为什么XAML是相关的?我应该在哪里创建该房产?视图?视图模型? – Nestor

+0

当然是viewmodel。 CM有非常全面的文档。过去他们 –

回答

0

你不想在自然界的视图中对视图模型进行方法调用..有点甚至对于你声称工作的项目也打破了CMs能力背后的想法。

作为eran otzap指出你需要使用约定或Message.Attach,从视图调用viewmodel的方法是打破了一些东西,不妨在这种情况下使用CM。有些人甚至会彻底删除代码背后的代码,因为他们根本不使用它们。其次,如果它与视图相关,那么它不会影响视图模型,但是由于您调用视图模型,所以SoC和MVVM的前提被抛出并且测试变得非常困难。

调用是不好的,事件的传递可能稍微好一点,但仍然需要一些非常臭的代码来做到这一点。

caliburnmicro.com上的文档非常清晰,github存储库上的示例对于适用于CM的理想来说非常全面。

相关问题