gpt4 book ai didi

wpf - 使用自定义 ListBox ControlTemplate 降低性能

转载 作者:行者123 更新时间:2023-12-03 10:55:34 24 4
gpt4 key购买 nike

使用源自 ListBox 的自定义控件的模板导致过滤ItemSource变慢。过滤是在 ItemSource 的 get 中完成的。该控件绑定(bind)到。正常 ListBox 时不存在此问题已使用,那么为什么自定义 ListBox 会有所不同? ?

过滤:

public IEnumerable<LibraryViewModel> Libraries {
get {
if (!string.IsNullOrEmpty(this.LibrarySearchString))
return _libraries.Where(lib => IsLibraryMatch(lib, this.LibrarySearchString));
else
return _libraries.OrderBy(lib => !lib.IsFavourite);
}
}

使用控件:
<con:FilterListBox Grid.Row="1"
ItemsSource="{Binding Libraries}"
SelectedItem="{Binding SelectedLibrary}"
ItemTemplate="{StaticResource
LibraryItemTemplate}"
SearchString="{Binding LibrarySearchString, Mode=TwoWay}"
IsSearching="False"
Margin="4"/>

控制模板:
<Style x:Key="{x:Type con:FilterListBox}" TargetType="{x:Type con:FilterListBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type con:FilterListBox}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>

<DockPanel Grid.Row="0">
<TextBlock Text="Search"
VerticalAlignment="Center"/>
<TextBox Text="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=SearchString,
UpdateSourceTrigger=PropertyChanged}"
Margin="4,0,0,0"/>
</DockPanel>

<ScrollViewer Grid.Row="1" CanContentScroll="True">
<StackPanel IsItemsHost="True"
HorizontalAlignment="Stretch"/>
</ScrollViewer>

<TextBlock Grid.Row="1"
Text="Searching..."
HorizontalAlignment="Center"
VerticalAlignment="Center"
Visibility="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=IsSearching,
Converter={StaticResource CollapsedIfFalseConverter}}"/>
</Grid>

</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

谢谢你的帮助。

最佳答案

您的FilterListBox 的缓慢行为可能会出现虚拟化问题。您替换了 ListBox 的 ItemsHost用一个简单的StackPanel .默认情况下,列表框使用 VirtualizingStackPanel ,尽可能虚拟化项目。请参阅默认列表框模板作为引用。如果您有一个简单的 StackPanel 作为 ItemsPresenter,则 ListBox 必须在您的过滤器更改时重新呈现每个项目。根据项目的数量,这可能会导致您的行为缓慢。尝试改用默认的 itemshost。您还应该知道,虚拟化仅适用于“简单”项目(基本上每个项目的高度相同)。

关于wpf - 使用自定义 ListBox ControlTemplate 降低性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12676788/

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