带有包装和虚拟化的ListBox

时间:2011-05-13 14:41:26

标签: silverlight listbox silverlight-4.0 virtualization

我正在尝试在Silverlight中配置ListBox以同时进行包装和虚拟化。

这是我当前的解决方案,使用Silverlight工具包WrapPanel:

<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
         ItemsSource="{Binding}">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <toolkit:WrapPanel/> 
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <my:MyControl/>
        </DataTemplate>
    </ListBox.ItemTemplate>  
</ListBox>

此代码正确包装。但是虚拟化被禁用:如果我将日志添加到MyControl的构造函数中,我可以看到为集合中的项创建了一个控件,即使它们不可见。在我的情况下这是一个问题,因为要显示的对象和控件很重,占用的内存太多。

3 个答案:

答案 0 :(得分:2)

我创建了一个VirtualizingWrapPanel for Silverlight。来源是available on GitHub

需要注意的一点是,为了简化实施,所有项目的大小必须相同。

答案 1 :(得分:0)

我不知道Silverlight的免费虚拟化WrapPanel,但我找到了一个WPF。您可以将其转换为Silverlight。传统上,创建虚拟化面板非常难以正确使用。

Virtualizing WrapPanel for Silverlight ($900?)

Virtualizing WrapPanel for WPF

答案 2 :(得分:0)

目前唯一能够实现此目的的是(商用)是由www.binarymission.co.uk出售的虚拟化包装面板控件

它还可以进行自定义分组,组头呈现等以及虚拟化+包装。 这是昂贵的,但值得每一分钱,并解决了我的要求。我是一个在线相册应用程序,该应用程序需要控制,休息是我们整合的所有简单UI,我们可以立即恢复控制成本:) 他们的支持也非常好。回复几乎在10分钟之内;)你通常不期望第三方控制供应商提供的东西,但我猜他们的价格当然会照顾到:)

Joe我已经修复了你在那里的链接。 直到有人对其进行了同行评审,它才能获胜;所有人都可以看到,所以这里是固定链接: Binarymission Virtualizing Wrap Panel for WPF & SL