当DataContext = this时,Prism ConfirmNavigationRequest()调用两次

时间:2012-03-05 15:45:10

标签: c# wpf mvvm prism

我正在使用Prism,我的视图实现IConfirmNavigationRequest,以便他们能够执行验证并在需要时取消导航。

我的问题是我有几个不使用MVVM的视图,并定义DataContext = this。这样做会导致Prism两次调用我的视图ConfirmNavigationRequest(),这意味着我要求用户的响应两次。

基本上是这样的:

  1. Prism检查视图是否实现IConfirmNavigationRequest并在其上调用ConfirmNavigationRequest()
  2. 询问用户是否愿意继续。
  3. 用户点击“确定”,ConfirmNavigationRequest()返回true
  4. Prism检查viewmodel(在我的情况下,它是视图)是否实现IConfirmNavigationRequest并在其上调用ConfirmNavigationRequest()
  5. 再次询问用户是否要继续。
  6. 正如您所看到的,Prism要求我确认两次,因为它会同时查询视图和视图模型。

    所以我的问题是,我怎样才能防止这种情况发生?或者我如何能够检测出哪个呼叫可以忽略其中一个呢?我考虑过调查continuationCallback参数,但我不太喜欢这个解决方案,因为它不会在下一版Prism中破坏。

1 个答案:

答案 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;

这应该有效,但这意味着我需要单独更改每个视图。不需要对视图进行更改的解决方案会更好。