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