我有一个窗口,它的数据上下文是一个视图模型。现在,在 vm 和 window(view) 的范围之外,我有一个将被调用的方法。该方法需要显示窗口并让用户更改一些内容,然后当用户完成时,需要关闭窗口并继续该方法。棘手的是,我在窗口上的按钮绑定到视图模型中的命令。这些命令会触发诸如“userCancelled”和“userOked”之类的事件。所以我想捕捉这些事件以知道何时关闭窗口并继续使用该方法。
如果我使用 ShowDialog 在窗口上,则不会捕获事件(我假设因为线程被捆绑等待对话框关闭)。但是,如果我使用 Show,该方法将继续运行。我需要它等待。我已经尝试过 Thread.Sleep,直到打开了某个布尔值,但这也会占用线程并使窗口不可用(使用 .Show())。
我试过制作一个 backgroundWorker,但我仍然遇到同样的问题。
我知道我可以在按钮上使用代码隐藏,但是对于 OK 按钮,viewModel 必须验证其状态是否有效。让视图与视图模型协商违背了 MVVM 松散耦合风格的观点,对吗?
我正在自己学习 WPF 和 MVVM,我想把它做好,并在可行的情况下坚持良好的设计原则。我该怎么做?我究竟做错了什么?谢谢。