2015-05-21 157 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的理想來說非常全面。

相關問題