2012-03-05 7 views
0

私はプリズムを使用しており、ビューはIConfirmNavigationRequestを実装しており、必要に応じてナビゲーションをキャンセルできます。Prism ConfirmNavigationRequest()は、DataContext = thisのときに2回呼び出されます。

私の問題はMVVMを使用しないいくつかのビューがあり、DataContext = thisを定義していることです。そうすることでPrismは私のビューのConfirmNavigationRequest()を2回呼び出すことになります。つまり、私はユーザーの応答を2回尋ねます。

基本的に何が起こっているこのです:ビューがIConfirmNavigationRequestを実装し、それがない場合は、それにConfirmNavigationRequest()を呼び出す場合

  1. プリズムをチェックします。
  2. ユーザーは、彼が続行したいかどうか尋ねられます。
  3. ユーザーが[OK]をクリックし、ConfirmNavigationRequest()trueを返します。
  4. Prismは、ビューモデル(私の場合はビューです)がIConfirmNavigationRequestを実装しているかどうかを確認し、その場合はConfirmNavigationRequest()を呼び出します。
  5. ユーザーは、彼が続行したいかどうか再度尋ねられます。あなたが見ることができるように、それはビューとのviewmodelの両方を照会するため

、Prismは確認倍のための私の見解を求めます。

私の質問は、どうしたらこのようなことが起きるのを防ぐことができますか、どのコールを検出できますか?私はcontinuationCallbackパラメータを調べることを考えましたが、次のバージョンのPrismで壊れてしまう可能性は低いので、このソリューションはあまり好きではありません。

答えて

0

私がこれまで持って最善の解決策は、私は、ビューのDataContextUserControlに設定されますが、ビューを保持する内部要素を使用して、設定しないであろうことを示唆している私はPrism's forumでDCherubiniから得た1、です代わりにそれのためのDataContext

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

grid.DataContext = this; 

代わりの

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

uc.DataContext = this; 

これは動作するはずですが、それは私が個別に各ビューを変更する必要があるということです。ビューを変更する必要がないソリューションはより良いでしょう。

関連する問題