2012-03-05 2 views
0

프리즘을 사용하고 있으며 뷰에서 IConfirmNavigationRequest을 구현하여 필요에 따라 유효성 검사를 수행하고 탐색을 취소 할 수 있습니다.프리즘 ConfirmNavigationRequest()가 DataContext = this 일 때 두 번 호출됩니다.

내 문제는 MVVM을 사용하지 않는 여러 가지보기가 있고 DataContext = this을 정의한다는 것입니다. 이렇게하면 Prism이 내보기의 ConfirmNavigationRequest()을 두 번 호출하게되므로 사용자의 응답을 두 번 요청합니다.

는 기본적으로 무슨 일이에요하는 것은 이것이다 : 뷰가 IConfirmNavigationRequest를 구현하고 않는 경우에 ConfirmNavigationRequest()를 호출

  1. 프리즘 확인합니다.
  2. 계속 하시겠습니까?
  3. 사용자가 확인을 클릭하면 ConfirmNavigationRequest()true을 반환합니다.
  4. 프리즘은 viewmodel (필자의 경우보기입니다.)이 IConfirmNavigationRequest을 구현하는지 확인한 후 ConfirmNavigationRequest()을 호출합니다.
  5. 계속 하시겠습니까? 당신이 볼 수 있듯이이 뷰와 뷰 모델 모두를 쿼리 때문에

는, 프리즘 두 번을 확인 내보기를 요청합니다.

내 질문은 어떻게 이런 일이 일어나지 않도록하거나 어떻게 그 중 하나를 무시할 수있는 호출을 감지 할 수 있습니까? 내가 continuationCallback 매개 변수를 조사하는 것에 대해 생각했지만, 다음 버전의 프리즘에서 깨질 가능성은 거의 없으므로이 솔루션이 너무 마음에 들지 않습니다.

답변

0

내가 지금까지있어 가장 좋은 방법은 내가보기의 DataContextUserControl에 설정할 수 있지만보기를 개최합니다 내부 요소를 사용하여 설정하지 않습니다 것을 제안 내가 Prism's forum에 DCherubini에서 얻은 하나입니다 대신에 DataContext :

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

grid.DataContext = this; 

대신

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

uc.DataContext = this; 

이 작동해야하지만 그것이 내가 개별적으로 각각의보기를 변경해야하는 것을 의미한다. 뷰를 변경하지 않아도되는 솔루션이 더 좋을 것입니다.

관련 문제