启用NavigationCache和IncrementalUpdateBehavior时,ListViewItems变为空白

时间:2014-09-28 16:21:28

标签: windows-phone-8.1

这是我的代码:

<ListView ItemsSource="{Binding Items}" IsItemClickEnabled="True" ItemClick="ItemView_ItemClick" ContinuumNavigationTransitionInfo.ExitElementContainer="True">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Border BorderBrush="{StaticResource ButtonBorderThemeBrush}" BorderThickness="0,0,0,3">
                <StackPanel Margin="0,0,0,9.5">
                    <TextBlock
                    Text="{Binding Title}"
                    TextWrapping="Wrap"
                    Pivot.SlideInAnimationGroup="1"
                    CommonNavigationTransitionInfo.IsStaggerElement="True"
                    Style="{ThemeResource ListViewItemTextBlockStyle}"
                    Margin="0,0,19,0">
                        <interactivity:Interaction.Behaviors>
                            <core:IncrementalUpdateBehavior Phase="1"/>    
                        </interactivity:Interaction.Behaviors>

                    </TextBlock>
                    <TextBlock
                    Text="{Binding Description}"
                    TextWrapping="WrapWholeWords"
                    Pivot.SlideInAnimationGroup="2" 
                    CommonNavigationTransitionInfo.IsStaggerElement="True" 
                    Style="{ThemeResource ListViewItemContentTextBlockStyle}"
                    Margin="0,0,19,0">
                        <interactivity:Interaction.Behaviors>
                            <core:IncrementalUpdateBehavior Phase="2"/>    
                        </interactivity:Interaction.Behaviors>
                    </TextBlock>
                </StackPanel>
            </Border>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

然后,我在代码隐藏中设置NavigationCacheMode = NavigationCacheMode.Required。当我导航到ItemPage并返回时。当您滑动ListViewItems并且再也不显示时,ListViewItems将变为空白。他们就这样消失了:

blank listviewitem

1 个答案:

答案 0 :(得分:1)

最后,我发现了问题。这是一个错误。

因为在IncrementalUpdateBehavior中,它使用一个名为&#34; FindContentTemplateRoot&#34;的函数。在可视化树中搜索关联对象的ContentTemplateRoot。当我导航到另一个页面时,它会引发相关对象的Unloaded事件并再次搜索可视树。但是这次它失败了,因为父母已经被卸下了。 VisualTreeHelper.GetParent()返回null。

因此,它会导致此行为通常无法解除关联对象的错误。页面返回时,关联的对象再次缓存。这样相关对象的不透明度和DataContext将设置两次或更多次。它只是搞砸了。