【问题标题】:how to optimize windows phone nested list box?如何优化windows phone 嵌套列表框?
【发布时间】:2014-06-17 11:20:47
【问题描述】:

这是我的数据源类型

public class Part
{
    public int PartNumber { get; set; }
    public string ar_PartNumber { get; set; }
    public List<PartSuras> PartSuras { get; set; }
    public int PageNumber { get; set; }
    public string ar_PageNumber { get; set; }

}

public class PartSuras
{
    public int SuraID { get; set; }
    public string ar_SuraID { get; set; }

    public string SuraTitle { get; set; }
    public string SuraTitleEn { get; set; }
    public int StartVerseID { get; set; }
    public int PageNumber { get; set; }
    public string ar_PageNumber { get; set; }
}

这里是嵌套列表框

 <ListBox  Loaded="list_Index_Loaded" Name="list_Index" HorizontalAlignment="Stretch" Margin="-12,-40,-12,0"  VerticalAlignment="Top"  ScrollViewer.VerticalScrollBarVisibility="Disabled">
                    <ListBox.ItemTemplate >
                        <DataTemplate>
                            <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Top">
                                <Button HorizontalAlignment="Stretch" Width="480" BorderBrush="#FFCADBBD" Margin="0,-12" BorderThickness="0,0,0,2" Background="#FFD2BC70" Foreground="Black" Name="bt_part" Tag="{Binding PageNumber}" Tap="bt_part_Tap" >
                                    <TextBlock HorizontalAlignment="Stretch" TextAlignment="Center">
                                    <Run Text="الجزء "></Run>
                                    <Run Text="{Binding ar_PartNumber}"></Run>
                                    </TextBlock>
                                </Button>
                                <ListBox Name="list_sura" ItemsSource="{Binding PartSuras}" ScrollViewer.VerticalScrollBarVisibility="Disabled">
                                    <ListBox.ItemTemplate>
                                        <DataTemplate>
                                            <Button  HorizontalAlignment="Stretch" Width="480" Margin="0,-12"  BorderThickness="0,0,0,2" Background="#FFE5DCAA" Foreground="Black" Name="bt_part" Tag="{Binding PageNumber}" Tap="bt_part_Tap" >
                                                <Grid Width="430" HorizontalAlignment="Stretch">
                                                    <Grid.ColumnDefinitions>
                                                        <ColumnDefinition></ColumnDefinition>
                                                        <ColumnDefinition></ColumnDefinition>
                                                    </Grid.ColumnDefinitions>
                                                    <TextBlock Grid.Column="0" HorizontalAlignment="Stretch" TextAlignment="Left">
                                                     <Run Text="{Binding ar_SuraID}"></Run>
                                                     <Run Text="-"></Run>
                                                     <Run Text="{Binding SuraTitle}"></Run>
                                                    </TextBlock>
                                                    <TextBlock Grid.Column="1" HorizontalAlignment="Stretch" TextAlignment="Right" Text="{Binding ar_PageNumber}"></TextBlock>
                                                </Grid>

                                            </Button>
                                        </DataTemplate>
                                    </ListBox.ItemTemplate>
                                </ListBox>

这有点慢,仅构建列表框需要近 3 秒 - 我测量了构建数据源的时间,没关系 - 在 Lumia 920(1 GB 内存)设备中,我该如何优化它?

如果我删除列表框并在代码后面创建控件,性能会更好吗?

【问题讨论】:

  • 你的数据是多少(记录数)?
  • 尝试将第一个 ListBox DataTemplage 中的 StackPanel 替换为 Grid。并尝试设置第一个列表框的高度/宽度
  • 项目数是30个主要项目和114个孩子
  • 你试过我上面的评论了吗?
  • 是的,它看起来更轻但不是很明显我仍然有 2 秒的时间来加载绑定数据

标签: windows-phone-8 windows-phone


【解决方案1】:

如果您不需要滚动(您有ScrollViewer.VerticalScrollBarVisibility="Disabled"),请尝试改用ItemsControl,它应该会执行得更好。

【讨论】:

  • 谢谢,时间减少了一秒,之前是三秒
【解决方案2】:

对外部列表框使用 LongListSelector,对内部列表框使用 ItemsControl。因为 LongListSelector 比 ListBox 更优化,所以不能使用嵌套的 longlistselector,这会导致滚动和虚拟化问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-15
    • 2016-04-10
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多