MVVM WP7-页面导航和转换动画



我是WP7中MVVM模型的初学者。我很难实现页面之间的导航以及动画转换。

我想要实现的目标:

  1. Page1导航到Page2时将启动过渡动画动画1age1导航到Page3将启动不同的过渡动画动画2

  2. ViewModel可以取消GoBack导航,例如当搜索模式打开时(TextBox可见,用户按下后退键后,TextBox将被隐藏,ViewModel将切换到搜索模式关闭,并阻止页面向后导航)

我创建了这样的东西:

ExtendedPhoneApplicationPage:PhoneApplicationPage-特殊控件,继承自PhoneApplicationPage,通过接口INavigation 调用对ViewModel的请求

MainViewModel:INavigation-MainViewModel,它是ViewModel,并实现接口INavigation。

它是如何工作的?

  1. 用户点击返回键
  2. ExtendedPhoneApplicationPage询问MainViewModel(或实现导航的其他模型)现在应该开始什么动画
  3. MainViewModel将正确的动画返回到View

MVVM是否正确?如果不能,如何才能做到这一点

编辑:

可能我上面写的不是很好的解决方案,我读到ViewModel应该只通过数据绑定和命令与View通信。我今天在想这个,我有了这个主意。

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>

在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}">

最新更新