我是一个WP7 MVVM模型的初学者。我在实现页面之间的导航和动画过渡方面遇到了麻烦。
我想要实现以下目标:
当 Page1 导航到 Page2 时,将开始转换动画 animation1,但当 Page1 导航到 Page3 时,将开始不同的转换动画 animation2。
ViewModel 可以取消返回导航,例如当搜索模式开启时(TextBox可见,在用户按下后退键后,TextBox将被隐藏,ViewModel将切换到关闭搜索模式,并防止页面返回导航)
我创建了以下内容:
ExtendedPhoneApplicationPage : PhoneApplicationPage - 特殊控件,继承自 PhoneApplicationPage,通过接口 INavigation 调用 ViewModel 请求
MainViewModel : INavigation - ViewModel,实现接口 INavigation。
它是如何工作的?
- 用户点击后退键
- ExtendedPhoneApplicationPage 通过 MainViewModel(或实现 INavigation 的其他对象)询问现在应该开始哪个动画
- 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>