在WP7 Silverlight应用程序和转换中加载数据

时间:2011-04-28 11:37:11

标签: silverlight data-binding windows-phone-7 silverlight-toolkit transition

我正在制作一个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的已完成事件中添加事件处理程序,转换对象的名称是什么? 转换有两种类型的转换,我可以检测转发发生和完成的(前向或后向)类型吗?

2 个答案:

答案 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)

过渡有一个已完成的事件,您可以使用它来识别过渡的结束。

没有已启动的事件,但您可以在导航到具有转换的页面之前触发相当于此的事件。