我有一个窗口,它的datacontext是一个viewmodel。现在,在vm和window(视图)的范围之外,我有一个将被调用的方法。该方法需要显示窗口并让用户更改一些内容,然后当用户完成时,窗口需要关闭并继续方法。棘手的是,我在窗口上的按钮绑定到viewmodel中的命令。这些命令触发'userCancelled'和'userOked'之类的事件。所以我想抓住这些事件,知道何时关闭窗口并继续使用该方法。
如果我使用ShowDialog,窗口上的,事件没有被捕获(我假设因为线程被绑定等待对话框关闭)。但如果我使用Show,该方法就会继续。我需要等待。我已经尝试过Thread.Sleep,直到打开一些布尔值,但这也会占用线程并使窗口无法使用(使用.Show())。
我尝试过制作一个backgroundWorker,但我仍遇到同样的问题。
我知道我可以在按钮上使用代码隐藏,但是对于OK按钮,viewModel必须验证其状态是否有效。查看视图模型的视图会破坏MVVM的松散耦合风格,对吗?
我自己学习WPF和MVVM,我想做得对,并坚持在实用的好设计原则。我该怎么办?我究竟做错了什么?感谢。
答案 0 :(得分:1)
您可以正确使用Prism和WindowRegionAdapter执行此操作。
是的,它稍微复杂但绝对值得投资,特别是如果你还需要打开其他窗户。让事情变得非常干净。