私は WP7 の MVVM モデルの初心者です。ページ間のナビゲーションとアニメーションの遷移を実装するのに問題があります。
私が達成したいこと:
Page1がPage2に移動すると遷移アニメーションanimation1が開始されますが、 Page1 が Page3に移動すると別の遷移アニメーションanimation2が開始されます。
ViewModel は GoBack ナビゲーションをキャンセルできます。たとえば、検索モードがオンの場合 (TextBox が表示され、ユーザーが戻るキーを押した後、TextBox は非表示になり、ViewModel は検索モードがオフに切り替わり、ページが戻ることができなくなります)。
私はこのようなものを作成しました:
ExtendedPhoneApplicationPage : PhoneApplicationPage - 特別なコントロール、PhoneApplicationPage から継承し、インターフェイス INavigation によって ViewModel への要求を呼び出します
MainViewModel : INavigation - ViewModel である MainViewModel であり、インターフェイス INavigation を実装します。
使い方 ?
- ユーザーが戻るキーをクリック
- ExtendedPhoneApplicationPage は、MainViewModel (または INavigation を実装する別のもの) に、どのアニメーションを開始する必要があるかを尋ねます
- MainViewModel が適切なアニメーションを View に返す
MVVM で正しいですか? そうでない場合、どうすればこれを達成できますか?
編集:
おそらく私が上に書いたことはあまり良い解決策ではありません.ViewModelはView by Data BindingとCommandのみと通信する必要があることを読みました. 今日はそんなことを考えていて、ふと思いつきました。
XAML では、次のようになります。
<Navigation>
<NavigationInTransition>
<NavigationInTransition.ForwardTransitions>
<ForwardTransition NavigateTo="page2.xaml">
<ForwardTransition.Animation>
<SlideTransitionAnimation Mode="ForwardIn"/>
</ForwardTransition.Animation>
</ForwardTransition>
<ForwardTransition NavigateTo="page3.xaml">
<ForwardTransition.Animation>
<TurnstyleTransitionAnimation Mode="ForwardIn"/>
</ForwardTransition.Animation>
</ForwardTransition>
</NavigationInTransition.ForwardTransitions>
</NavigationInTransition>
<BackKeyPressed IsPrevent="{Binding SomethingBool}" Command="{Binding BackKeyPressed}"/>
</Navigation>