如何从 ViewModel 命令生成的线程中关闭窗口? [复制]

Posted

技术标签:

【中文标题】如何从 ViewModel 命令生成的线程中关闭窗口? [复制]【英文标题】:How do I close a window from a thread spawned by a ViewModel Command? [duplicate] 【发布时间】:2011-12-30 10:30:56 【问题描述】:

可能重复:WPF MVVM Newbie - how should the ViewModel close the form?

所以我有一个窗口,用户按下一个按钮。由于我使用的是 MVVM,这会导致在我的视图模型中触发命令。

此时,我的命令启动了一个后台工作人员来做一些有趣的事情。视图愉快地显示了一个进度条。然后在视图模型中触发线程完成事件。

期望的行为是当后台线程终止时,窗口应该关闭。

所以对于我的生活,我无法弄清楚如何在不引用视图模型中的视图的情况下获取线程完整代码来关闭窗口(众所周知,这类似于杀死小狗)。

【问题讨论】:

@Will:不客气,尽管现在我必须悬赏这个问题,因为 Nir ​​轻率的回答太让人不满意了 ;) @sixlettervariables:如果你做一个简单的搜索,这个问题已经被问了很多次,并且回答了很多不同的方式。我知道我过去回答过这个版本。正确的答案总是一样的——正统?使用适配器或行为或其他一些抽象的通信方法来通知表单进行远足。否则,请获取您的参考并完成。无论如何,没有 MVVM 相当于 10 条诫命,所以你可以做任何让你感觉更好的事情,包括觊觎你邻居的代码。 【参考方案1】:

就您的工作人员进入视图的进度而言(我假设这是通过视图处理的事件完成的),在您的视图模型中定义一个 WorkerFinished 事件应该不会那么复杂,视图也可以处理。

【讨论】:

以上是关于如何从 ViewModel 命令生成的线程中关闭窗口? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从作为wpf mvvm模式中的窗口打开的视图模型中关闭用户控件?

WPF(MVVM):从 Viewmodel 关闭视图?

WPF MVVM中在ViewModel中关闭或者打开Window

如何在线程中关闭 QWebSocket?

如何从 viewmodel 访问用户控件上的命令

如何使用 mvvm 模式从不同的 ViewModel 获取属性和调用命令