2012-03-05 108 views
0

我使用Prism和我的視圖實現IConfirmNavigationRequest以使它們能夠執行驗證並在需要時取消導航。Prism ConfirmNavigationRequest()在DataContext = this時調用兩次

我的問題是,我有幾個不使用MVVM的視圖,並且定義了DataContext = this。這樣做會導致Prism兩次調用我的視圖ConfirmNavigationRequest(),這意味着我要求用戶的響應兩次。

基本上什麼事情是這樣的:如果

  1. 棱鏡檢查視圖實現IConfirmNavigationRequest和調用ConfirmNavigationRequest()如果這樣做。
  2. 詢問用戶是否要繼續。
  3. 用戶單擊確定並ConfirmNavigationRequest()返回true
  4. 棱鏡檢查是否viewmodel(在我的情況下,它的視圖再次)實現IConfirmNavigationRequest和調用ConfirmNavigationRequest()如果它。
  5. 再次詢問用戶是否要繼續。

正如你所看到的,棱鏡問我確認觀點兩次,因爲這兩個查詢視圖和視圖模型。

所以我的問題是,我該如何防止這種情況發生,或者我該如何檢測哪個呼叫是可以忽略其中的一個?我想過調查continuationCallback參數,但我不太喜歡這個解決方案,因爲它不太可能在下一個版本的Prism中破解。

回答

0

我迄今爲止最好的解決方案是一個我從DCherubini拿到Prism's forum,這表明我不會設置視圖的DataContextUserControl,但使用將持有的觀點的內部元件,並設置DataContext它來代替:

<UserControl> 
    <Grid x:Name="grid"> 
     ... 
    </Grid> 
</UserControl> 

grid.DataContext = this; 

,而不是

<UserControl x:Name="uc"> 
</UserControl> 

uc.DataContext = this; 

這應該工作,但它意味着我需要單獨更改每個視圖。不需要更改視圖的解決方案會更好。