【问题标题】:Caliburn.Micro return result from child view modelCaliburn.Micro 从子视图模型返回结果
【发布时间】:2015-01-27 13:06:39
【问题描述】:

所以我有一个 ViewModel,它包含从列表中选择一个人的逻辑,如果要选择的人不在列表中,则列表项会打开一个新对话以创建所述人。

我的问题是:如何在子视图模型中创建人并在父视图模型中获取它。我搜索(很多)并没有发现任何令人满意的东西。 据我所知,至少有三种可能: 1. 使用 CMs EventAggregator 将消息发送给 Parent(以及其他所有收听者) 2. 在子 VM 上使用一个属性,并在 WindowManger 关闭 Dialogue 后访问它。 3.实现IResult

我已经做了第一个,但这(如前所述)并不令人满意。我不希望每个人都得到结果,只是因为他听了 EventAggregator。第二个(在我看来)不是很像 MVVM(或者是吗?),因为如果它是异步的,我无法控制它。 据我从 CMs 文档中可以看出,第三种选择是首选方式。但是我没有找到解释如何使其适应我的解决方案。 我必须获得用户输入,而这在 Execute(CoroutineExecutionContext context) 方法中是不可能的。

我是否忽略了某些东西,或者第二种方法真的是实现这一目标的最佳方法吗?

【问题讨论】:

    标签: wpf mvvm caliburn.micro


    【解决方案1】:

    第二种方法完全没问题我在某些情况下需要响应结果才能继续并在关闭与我在不同方法调用中调用的视图模型关联的视图时获取它,它可以通过专门的服务来完成旨在获取结果,如果您正在寻找 S.O.C 以避免以后发生冲突。第一种方法实际上是我用于一些事情的东西,除了我直接控制可以看到消息的内容(要监视的新类对象)并且唯一可以对消息做出反应的屏幕会做一些事情.. 第三种非常强大但我从来没有真正接触过 CoRoutines 的用法,它是在 async/await 可用之前对 async 的回答。周围有很多 IResult 示例

    【讨论】:

    • 协程绝对是一个孤立的解决方案,因为 async / await 更强大。 2 可能是最好的方法。
    猜你喜欢
    • 2016-07-02
    • 2013-05-11
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    相关资源
    最近更新 更多