gpt4 book ai didi

c# - 更好的填充 ListBox DataTemplate 的性能

转载 作者:行者123 更新时间:2023-11-30 15:32:01 25 4
gpt4 key购买 nike

我有一个 ListBox,它有一个 DataTemplate。这个DataTemplate是用CodeBehind填充的,但是性能真的很差。填充它的方法在构造函数中调用。请告诉我如何改进它

 <ListBox  ScrollViewer.HorizontalScrollBarVisibility="Visible"
ScrollViewer.CanContentScroll="False"
Name="lbCars"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"
IsSynchronizedWithCurrentItem="True">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="MaxHeight" Value="100"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image Height="auto" Width="125" Source="{Binding car_img_src}" Grid.Column="0" />
<VirtualizingStackPanel Margin="5, 0, 0, 0" Grid.Column="1" Orientation="Vertical" VerticalAlignment="Center">
<TextBlock Text="ID:" FontSize="12" FontWeight="Bold" Margin="0, 0, 0, 2" />
<TextBlock FontWeight="Bold" FontSize="12" Text="Name:" Margin="0, 0, 0, 2"/>
<TextBlock FontSize="12" Text="Kategorie:" FontWeight="Bold" Margin="0, 0, 0, 2"/>
<TextBlock FontSize="12" Text="Tuning:" FontWeight="Bold"/>
</VirtualizingStackPanel>
<VirtualizingStackPanel Grid.Column="2" Orientation="Vertical" VerticalAlignment="Center" Margin="5, 0, 0, 0">
<TextBlock FontSize="12" Text="{Binding car_id}" Margin="0, 0, 0, 2"/>
<TextBlock FontSize="12" Text="{Binding car_name}" Margin="0, 0, 0, 2"/>
<TextBlock FontSize="12" Text="{Binding car_group}" Margin="0, 0, 0, 2"/>
<TextBlock FontSize="12" Text="{Binding car_tuning}"/>
</VirtualizingStackPanel>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

现在我如何填充它:

        public MainWindow() {
InitializeComponent();
InitializeRsc();
}

初始化Rsc:

carList.Add(new carEntry { car_id = 400, car_group = "Off Road", car_img_src = "Resources/cars/Vehicle_400.jpg", car_name = "Landstalker", car_tuning = "Transfender" }); 
... ((about 300-500 others))

我填充了 4 个列表框,每个列表框大约有 100-200 个项目

最佳答案

以下是我看到的问题:

  1. 您的 ListBox 实际上并未虚拟化。无论您设置的其他属性如何,设置 ScrollViewer.CanContentScroll="False" 都会禁用虚拟化。将其更改为 True 应该可以解决此问题。
  2. 无需在 ItemTemplate 中使用 VirtualizingStackPanel。虚拟化不会发挥作用,因为每个面板中只有 4 个 TextBlock,而且您只是在添加不必要的开销。请改用 StackPanel

关于c# - 更好的填充 ListBox DataTemplate 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19751746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com