3

私は WP7 の MVVM モデルの初心者です。ページ間のナビゲーションとアニメーションの遷移を実装するのに問題があります。

私が達成したいこと:

  1. Page1がPage2に移動すると遷移アニメーションanimation1が開始されますが、 Page1 が Page3移動すると別の遷移アニメーションanimation2が開始されます。

  2. ViewModel は GoBack ナビゲーションをキャンセルできます。たとえば、検索モードがオンの場合 (TextBox が表示され、ユーザーが戻るキーを押した後、TextBox は非表示になり、ViewModel は検索モードがオフに切り替わり、ページが戻ることができなくなります)。

私はこのようなものを作成しました:

ExtendedPhoneApplicationPage : PhoneApplicationPage - 特別なコントロール、PhoneApplicationPage から継承し、インターフェイス INavigation によって ViewModel への要求を呼び出します

MainViewModel : INavigation - ViewModel である MainViewModel であり、インターフェイス INavigation を実装します。

使い方 ?

  1. ユーザーが戻るキーをクリック
  2. ExtendedPhoneApplicationPage は、MainViewModel (または INavigation を実装する別のもの) に、どのアニメーションを開始する必要があるかを尋ねます
  3. 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>
4

1 に答える 1

0

App.xaml でリソースを作成します

  <Style x:Key="PageStyle" TargetType="phone:PhoneApplicationPage">
  <Setter Property="toolkit:TransitionService.NavigationInTransition">
    <Setter.Value>
      <toolkit:NavigationInTransition>
        <toolkit:NavigationInTransition.Backward>
          <toolkit:TurnstileTransition Mode="BackwardIn" />
        </toolkit:NavigationInTransition.Backward>
        <toolkit:NavigationInTransition.Forward>
          <toolkit:TurnstileTransition Mode="ForwardIn" />
        </toolkit:NavigationInTransition.Forward>
      </toolkit:NavigationInTransition>
    </Setter.Value>
  </Setter>
  <Setter Property="toolkit:TransitionService.NavigationOutTransition">
    <Setter.Value>
      <toolkit:NavigationOutTransition>
        <toolkit:NavigationOutTransition.Backward>
          <toolkit:TurnstileTransition Mode="BackwardOut" />
        </toolkit:NavigationOutTransition.Backward>
        <toolkit:NavigationOutTransition.Forward>
          <toolkit:TurnstileTransition Mode="ForwardOut" />
        </toolkit:NavigationOutTransition.Forward>
      </toolkit:NavigationOutTransition>
    </Setter.Value>
  </Setter>
</Style>

トランジション Style="{StaticResource PageStyle}" を持つページの場合

于 2012-10-11T08:33:58.610 に答える