[英]How to invoke a ViewModel method with result from View in Caliburn.Micro
在我的Caliburn.Micro項目中,我有一個Window視圖。
我在視圖中使用一些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");
}
他們工作得很好。
在我的視圖中,我有一個關閉窗口的方法:
private void EventClose(object sender, RoutedEventArgs e)
{
this.DialogResult = false;
Close();
}
不幸的是,在關閉生效之前,我必須檢查ViewModel中的某些條件。
問題是Invoke返回void ,所以我不能調用返回值的方法。
Invoke是否可以從ViewModel的方法獲取結果?
您本質上不希望從視圖中進行對視圖模型的方法調用。有點兒破壞了CM功能背后的想法,即使您主張工作的項目也是如此。
正如eran otzap指出的那樣,您需要使用Convention或Message.Attach,以便從視圖中調用viewmodel上的方法破壞了一些事情,在這種情況下可能不使用CM。 有些人甚至會完全刪除文件后面的代碼,因為它們根本不使用它們。
其次,如果它與視圖相關,那么它不會影響正常的視圖模型,但是由於您正在調用該視圖模型,因此SoC和MVVM的前提被拋棄了,並且測試變得非常困難。
調用是不好的,事件傳遞可能會稍微好一些,但仍然需要一些非常臭的代碼才能執行。
caliburnmicro.com上的文檔非常清楚,而github存儲庫上的示例對於針對CM使用的理想情況而言非常詳盡。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.