Silverlight 在ListBox的末尾添加一个Load More按钮而不丢失虚拟化?

Silverlight 在ListBox的末尾添加一个Load More按钮而不丢失虚拟化?,silverlight,windows-phone-7,listbox,windows-phone-7.1,Silverlight,Windows Phone 7,Listbox,Windows Phone 7.1,我知道,通过像这样编辑列表框的默认样式,我可以在列表框的最末端有一个按钮 <ScrollViewer x:Name="ScrollViewer" ...> <StackPanel> <ItemsPresenter /> <Button /> </StackPanel> </ScrollViewer> 但是,这样做会破坏列表框的虚拟化,渲染时间会变得很长 我能想到的就是

我知道,通过像这样编辑
列表框的默认样式,我可以在
列表框的最末端有一个
按钮

<ScrollViewer x:Name="ScrollViewer" ...> 
    <StackPanel>
        <ItemsPresenter />
        <Button />
    </StackPanel>
</ScrollViewer> 

但是,这样做会破坏
列表框的虚拟化,渲染时间会变得很长

我能想到的就是

  • 在中创建一个虚拟项并将其添加到我的项集合的末尾 viewmodel,并在名为ButtonGridVisibility的虚拟对象中具有
    Visibility
    属性,并将其设置为
    Visibility.Visible
  • 在我的
    列表框
    项目模板
    中,有两个
    网格
    。一个显示 在正常项目布局中,另一个显示加载更多
    按钮
    。 然后基于ButtonGridVisibility属性切换其
    可见性

  • 这可能行得通,但我只是想知道是否有更简单/更好的方法?

    现在有很多额外的功能可以帮助解决这个问题。其中之一是在ScrollViewer上添加了其他视觉状态,添加了“水平压缩”和“垂直压缩”视觉状态组。通过利用这些功能并连接到
    CurrentStateChanging
    事件,您可以根据需要加载更多项


    有关如何实现此功能的详细信息,请访问

    我知道这是一篇老文章,但如果有人无意中发现:

    有一个LongListSelector控件或作为for WP7的一部分,它非常灵活地支持此场景。如果要在最后一项之后(或第一项之前)添加特定内容,只需设置控件的ListFooter或ListHeader即可。您可以将任何内容放入其中,此内容将与其他项目一起相应地滚动

    因此,对于WP7,这将如下所示:

    <toolkit:LongListSelector ItemsSource="{Binding Items}">
        <toolkit:LongListSelector.ListFooter>
            <Grid>
                <Button />
            </Grid>
        </toolkit:LongListSelector.ListFooter>
    </toolkit:LongListSelector>
    
    
    

    其中
    toolkit
    xmlns:toolkit=“clr namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.toolkit”

    谢谢,实际上我知道这一点,但是我不希望
    列表框在滚动到最后时自动加载更多数据。我认为有一个按钮对用户来说更清晰。啊。。。我希望一年前就知道这一点!非常感谢,卡雷尔!!