当DataContext=this时,Prism ConfirmNavigationRequest()调用了两次
本文关键字:调用 两次 ConfirmNavigationRequest DataContext this Prism | 更新日期: 2023-09-27 18:26:39
我正在使用Prism,我的视图实现IConfirmNavigationRequest
,以便使它们能够执行验证并在需要时取消导航。
我的问题是,我有几个视图不使用MVVM,而是定义了DataContext = this
。这样做会导致Prism调用我的视图的ConfirmNavigationRequest()
两次,这意味着我请求用户的响应两次。
基本上是这样的:
- Prism检查视图是否实现了
IConfirmNavigationRequest
,如果实现了,则对其调用ConfirmNavigationRequest()
- 询问用户是否要继续
- 用户单击"确定",
ConfirmNavigationRequest()
返回true
- Prism检查视图模型(在我的情况下,它又是视图)是否实现了
IConfirmNavigationRequest
,如果实现了,则对其调用ConfirmNavigationRequest()
- 再次询问用户是否要继续
正如您所看到的,Prism两次请求我的视图进行确认,因为它同时查询视图和视图模型。
所以我的问题是,我如何防止这种情况发生,或者我如何检测哪个呼叫是哪个呼叫,这样我就可以忽略其中一个呼叫?我曾想过研究continuationCallback
参数,但我不太喜欢这个解决方案,因为它在Prism的下一个版本中不太可能崩溃。
到目前为止,我得到的最好的解决方案是我在Prism论坛上从DCherubini那里得到的解决方案,这表明我不会在我的UserControl
上设置视图的DataContext
,而是使用一个内部元素来保存视图,并为其设置DataContext
:
<UserControl>
<Grid x:Name="grid">
...
</Grid>
</UserControl>
grid.DataContext = this;
而不是
<UserControl x:Name="uc">
</UserControl>
uc.DataContext = this;
这应该有效,但这意味着我需要单独更改每个视图。一个不需要更改视图的解决方案会更好。