gpt4 book ai didi

c# - 如何在Caliburn.Micro中使用View的结果调用ViewModel方法

转载 作者:行者123 更新时间:2023-12-03 10:45:01 34 4
gpt4 key购买 nike

在我的Caliburn.Micro项目中,我有一个Window View 。

我在 View 中使用一些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");
}

他们工作得很好。

在我的 View 中,我有一个关闭窗口的方法:
private void EventClose(object sender, RoutedEventArgs e)
{
this.DialogResult = false;
Close();
}

不幸的是,在关闭生效之前,我必须检查ViewModel中的某些条件。

问题是Invoke返回 无效,因此我无法调用返回值的方法。

Invoke是否可以从ViewModel的方法获取结果?

最佳答案

您本质上不希望从 View 中执行对 View 模型的方法调用。有点儿破坏了CM功能背后的想法,即使您主张工作的项目也是如此。

正如 eran otzap 指出的那样,您需要使用约定或Message.Attach,以便从 View 中调用viewmodel上的方法会破坏一些事情,在这种情况下,可能不使用CM。有些人甚至会完全删除文件后面的代码,因为它们根本不使用它们。

其次,如果它与 View 相关,那么它不会影响可以使用的 View 模型,但是由于您正在调用该 View 模型,因此SoC和MVVM的前提被丢弃了,并且测试变得非常困难。

调用是不好的,事件传递可能会稍微好一些,但仍然需要一些非常臭的代码才能执行。

caliburnmicro.com上的文档非常清晰,而github存储库中的示例对于实现CM使用的理想条件而言非常详尽。

关于c# - 如何在Caliburn.Micro中使用View的结果调用ViewModel方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30375630/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com