复合命令触发时引发交互请求(WPF/PRISM)

本文关键字:WPF 请求 PRISM 交互 命令 复合 | 更新日期: 2023-09-27 18:17:30

我有一个场景,我在一个窗口中注册了多个视图,一次一个视图是活动的。

当窗口关闭时,我使用CompositeCommand来验证关闭可以发生,每个视图都使用该复合命令注册一个命令。

复合命令按预期工作,但我的问题是,一些视图需要引发一个交互请求,以允许用户确认他们想要关闭窗口,而不修复这些视图上的验证问题。

要做到这一点,一些视图有交互请求,它们在命令触发时触发,然后需要用户确认。

我遇到的问题是,如果视图不是当前活动视图,那么interactionrequest不能触发,因为raise事件变为null或抛出"This Visual is not connected to a PresentationSource"异常。

我已经尝试实现想要引发交互请求的视图的激活,但由于复合命令是同步执行的,因此无法在交互请求需要触发之前激活视图。

我要去实现这个错误吗?或者是否有一种方法可以让交互请求不抛出?

谢谢!

复合命令触发时引发交互请求(WPF/PRISM)

我想说这是其中一个地方,InteractionRequest不是工作的正确工具。它有一个隐含的假设,即它是当前呈现的视图的交互。对于你正在描述的事情,我通常有一个应用级的DialogService,它可以向用户呈现某种对话框,而不管屏幕上当前是什么视图。ViewModels或其他服务可以向其注入接口引用,并随时显示对话框。

该服务的实现可以在shell级别使用InteractionRequest本身,但是随后您可能会遇到放置问题,这取决于您希望如何呈现该对话框。因此,我通常会让该服务新建自己的窗口,作为对话框的框架,并将通过界面传递的内容呈现给它。

希望对你有帮助。