我是 WP7 中 MVVM 模型的初学者。我无法实现页面之间的导航以及动画过渡。
我想要达到的目标:
当Page1导航到Page2将开始过渡动画animation1但当Page1导航到Page3将开始不同的过渡动画animation2。
ViewModel 可以取消 GoBack 导航,例如打开搜索模式时(TextBox 可见,用户按返回键后,TextBox 将被隐藏,ViewModel 将切换到搜索模式关闭,并防止页面导航返回)
我创造了这样的东西:
ExtendedPhoneApplicationPage : PhoneApplicationPage - 特殊控件,继承自PhoneApplicationPage,通过接口INavigation调用ViewModel的请求
MainViewModel : INavigation - MainViewModel 是 ViewModel,并实现接口 INavigation。
这个怎么运作 ?
- 用户点击返回键
- ExtendedPhoneApplicationPage 询问 MainViewModel(或实现 INavigation 的不同)现在应该开始什么动画
- MainViewModel 将正确的动画返回给 View
MVVM 是否正确?如果没有怎么能做到这一点?
编辑:
可能我上面写的不是很好的解决方案,我读到 ViewModel 应该只通过 Data Binding 和 Command 与 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>