我正在制作一个WP7 Silverlight应用程序,并使用ViewModel存储数据和作为页面的datacontext。
每个PhonePage都有自己的数据,我在Page_Loaded事件处理程序中调用 App.ViewModel.LoadData()。 ListBox显示了ViewModel中的数据。
我使用来自Codeplex的Silverlight工具包的 TurnstileTransition 转换。 (http://silverlight.codeplex.com/releases/view/60291)
进一步澄清 转换在App.xaml中定义为资源:
<Style x:Key="TurnstileTransition" 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 TurnstileTransition}"
一切正常。
但是,在转换完成之前,数据已绑定到列表框!!
这看起来很难看!
我可以在转换的 END 处理事件(所以我加载数据并绑定它),如果是这样,我在哪里添加eventhandler?
我可以在转换的 START 处理事件(所以我清除这里的数据),如果是这样,我在哪里添加eventhandler ??
您是否建议我必须考虑其他一些解决方案?
如何在Transition的已完成事件中添加事件处理程序,转换对象的名称是什么? 转换有两种类型的转换,我可以检测转发发生和完成的(前向或后向)类型吗?
答案 0 :(得分:1)
尝试此操作(在您导航到的页面的上下文中)
var transition = TransitionService.GetNavigationInTransition(this); //This being the page with the associated navigation
transition.EndTransition += transition_EndTransition;
...
void transition_EndTransition(object sender, System.Windows.RoutedEventArgs e)
{
DataContext = ...;
}
我这样做是为了获得更平滑的动画,因为否则我需要做的数据库工作会破坏过渡的流动性,因为如果我在OnNavigatedTo'事件'中运行它太早执行
答案 1 :(得分:0)
过渡有一个已完成的事件,您可以使用它来识别过渡的结束。
没有已启动的事件,但您可以在导航到具有转换的页面之前触发相当于此的事件。