簡體   English   中英

如何在Caliburn.Micro中使用View的結果調用ViewModel方法

[英]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使用的理想情況而言非常詳盡。

Caliburn.Micro - 如何在 WPF 視圖中顯示多個項目,來自 ViewModel 繼承:導體<object> .Collection.AllActive<div id="text_translate"><p> 我在 WPF 應用程序中使用 Caliburn.Micro 作為我的 MVVM 框架。 我試圖在一個頁面中包含幾個自定義用戶控件,這些控件會根據用戶交互動態變化。 我了解 CM 約定是 View 將綁定到 ViewModel 中的Items屬性。</p><p> 我的問題是:</p><ol><li><p> 如何在我的視圖中訪問 ViewModel 的Items集合屬性中的每個項目?</p></li><li><p> 我可以像通常使用普通 WPF 控件那樣將每個項目單獨放置在父視圖頁面上嗎?</p></li></ol><p> 視圖頁面的基本外觀如下所示。 <a href="https://i.stack.imgur.com/5vlyX.jpg" rel="nofollow noreferrer">查看頁面布局</a></p><p>基本的 ViewModel 代碼:</p><pre> public class TestViewModel: Conductor&lt;object&gt;.Collection.AllActive { public TestViewModel() { Items.Add(new CustomUC1ViewModel()); Items.Add(new CustomUC2ViewModel()); Items.Add(new CustomUC3ViewModel()); } //following logic would reassign the Items collection as required }</pre><p> 附加到Items的 ViewModel 將根據用戶與父頁面和嵌入式用戶控件的交互而動態變化。</p><p> 我希望以上內容有意義(這是我的第一篇文章)。</p></div></object>

[英]Caliburn.Micro - How to display multiple items in WPF View from ViewModel that inherits: Conductor<object>.Collection.AllActive

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 使用Caliburn.Micro將視圖模型中的圖像加載到視圖中 使用Caliburn.Micro從ViewModel調用UserControl的方法 在Caliburn.Micro中如何將動作綁定到嵌套的ViewModel方法? Caliburn.View模型的微視圖分辨率<T> 如何使Caliburn.Micro ViewModel的文本框為ReadOnly? Caliburn.Micro從UserControl調用視圖模型 Caliburn.Micro - 如何在 WPF 視圖中顯示多個項目,來自 ViewModel 繼承:導體<object> .Collection.AllActive<div id="text_translate"><p> 我在 WPF 應用程序中使用 Caliburn.Micro 作為我的 MVVM 框架。 我試圖在一個頁面中包含幾個自定義用戶控件,這些控件會根據用戶交互動態變化。 我了解 CM 約定是 View 將綁定到 ViewModel 中的Items屬性。</p><p> 我的問題是:</p><ol><li><p> 如何在我的視圖中訪問 ViewModel 的Items集合屬性中的每個項目?</p></li><li><p> 我可以像通常使用普通 WPF 控件那樣將每個項目單獨放置在父視圖頁面上嗎?</p></li></ol><p> 視圖頁面的基本外觀如下所示。 <a href="https://i.stack.imgur.com/5vlyX.jpg" rel="nofollow noreferrer">查看頁面布局</a></p><p>基本的 ViewModel 代碼:</p><pre> public class TestViewModel: Conductor&lt;object&gt;.Collection.AllActive { public TestViewModel() { Items.Add(new CustomUC1ViewModel()); Items.Add(new CustomUC2ViewModel()); Items.Add(new CustomUC3ViewModel()); } //following logic would reassign the Items collection as required }</pre><p> 附加到Items的 ViewModel 將根據用戶與父頁面和嵌入式用戶控件的交互而動態變化。</p><p> 我希望以上內容有意義(這是我的第一篇文章)。</p></div></object> Caliburn.Micro-將側邊欄中的按鈕綁定到ViewModel中的方法 Caliburn.Micro無法匹配來自不同程序集的View和ViewModel 從另一個ViewModel設置Caliburn.Micro ControlContent
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM