我正在使用Prism,我的视图实现IConfirmNavigationRequest
,以便他们能够执行验证并在需要时取消导航。
我的问题是我有几个不使用MVVM的视图,并定义DataContext = this
。这样做会导致Prism两次调用我的视图ConfirmNavigationRequest()
,这意味着我要求用户的响应两次。
基本上是这样的:
IConfirmNavigationRequest
并在其上调用ConfirmNavigationRequest()
。ConfirmNavigationRequest()
返回true
。IConfirmNavigationRequest
并在其上调用ConfirmNavigationRequest()
。正如您所看到的,Prism要求我确认两次,因为它会同时查询视图和视图模型。
所以我的问题是,我怎样才能防止这种情况发生?或者我如何能够检测出哪个呼叫可以忽略其中一个呢?我考虑过调查continuationCallback
参数,但我不太喜欢这个解决方案,因为它不会在下一版Prism中破坏。
答案 0 :(得分:0)
我到目前为止得到的最佳解决方案是我在Prism's forum从DCherubini获得的解决方案,这表明我不会在DataContext
上设置视图UserControl
,而是使用将保持视图的内部元素,并为其设置DataContext
:
<UserControl>
<Grid x:Name="grid">
...
</Grid>
</UserControl>
grid.DataContext = this;
而不是
<UserControl x:Name="uc">
</UserControl>
uc.DataContext = this;
这应该有效,但这意味着我需要单独更改每个视图。不需要对视图进行更改的解决方案会更好。