如何在Windows Phone应用程序中的简单堆叠面板中虚拟化数据

本文关键字:数据 虚拟化 简单 Windows Phone 应用程序 | 更新日期: 2023-09-27 18:02:13

我用ScrollViewer和stackpanel创建了一个列表。我正在从codebehind向这个堆栈面板添加用户控件
我想虚拟化数据,以便提高应用程序的性能
我怎样才能做到这一点?

我不能使用Listbox,因为我将用户控件添加为DataItems,并且每个用户控件都有不同的宽度和高度。。请建议如何实施代码:

XAML

<ScrollViewer>
    <StackPanel x:Name="stckPnlComponentsLst" Visibility="{Binding IsBusy, Converter={StaticResource BooleanToVisibilityInvertedConverter}}" Orientation="Vertical">
    </StackPanel>
</ScrollViewer>

C#

for (int count = 0; count < countItems; count++)
{
    stckPnlComponentsLst.Children.Add(new ChannelNewsLstControl(ViewModel.ComponentData[count], false, false));
}

如何在Windows Phone应用程序中的简单堆叠面板中虚拟化数据

我认为在ScrollViewer中使用StackPanel在任何情况下都不是一个好主意。你不应该那样做。

有两个控件可以执行您想要的操作,ListBox和ListView。

如果你真的想在ScrollViewer中使用堆叠面板,只需用VirtualizingStackPanel替换你的stackpanel。但是,你不应该那样做。

请改用ListBox。请在此处查看样本。例如,在xaml 中定义ListBox

<ListBox x:Name="MyList">

然后在码尾中

var MyListData = new List<ChannelNewsLstControl>();
MyListData.Add(new ChannelNewsLstControl {name = "MyFirstChannelName});
MyList.ItemsSource=MyListData;

如果你有很多项目,我建议你使用Telerik的DataBoundListBox,因为它比普通的ListBox快得多(至少对于wp7来说(,并且支持虚拟化和异步加载。示例将非常相似,因为组件继承了ListBox并添加了前面提到的自己的功能。

编辑:最终答案:

Try to put a grid inside of your ItemTemplate and set its RowDefinition.Height = "Auto".请参阅此处的一些详细信息