eYe*_*eYe 1 data-binding wpf virtualization combobox image
我正在使用 WPF ComboBox 填充国家/地区列表,如下所示:

在 ComboBox 内部,我有一个 VirtualizingStackPanel,其中包含图像和 TextBlock:
<ComboBox.ItemTemplate>
<DataTemplate>
<VirtualizingStackPanel Orientation="Horizontal">
<Image Width="30" Height="30" Margin="0" Source="{Binding code, Converter={StaticResource ImageComboBoxConverter}}" VerticalAlignment="Center"/>
<TextBlock Margin="5" Text="{Binding country_Text}"/>
</VirtualizingStackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)
我正在使用一个简单的数据绑定转换器来检索我的标志文件。
问题是,填充列表大约需要 3-4 秒的时间。我可以应用某种缓冲或缓存技术来加快图像加载速度吗?
您需要虚拟化ComboBox.ItemsPanel,而不是.ItemTemplate。是ItemsPanel用于显示所有控件的面板,而 是ItemTemplate用于显示每个控件的面板。
Virtualized StackPanel 所做的只是不渲染不可见的项目。相反,它仅呈现可见项目(加上滚动缓冲区的一些额外内容),并且当您滚动时将替换每个项目后面的数据。所以用它来显示每个单独的项目是没有用的,你需要使用它作为面板来显示所有项目。
你的代码可能应该是这样的:
<ComboBox ItemsSource="{Binding Countries}">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Width="30" Height="30" Margin="0" Source="{Binding code, Converter={StaticResource ImageComboBoxConverter}}" VerticalAlignment="Center"/>
<TextBlock Margin="5" Text="{Binding country_Text}"/>
</StackPanel >
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)
您可能还需要将这些属性之一或全部添加到标记中<ComboBox>。
<ComboBox VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"
ScrollViewer.CanContentScroll="True" ...>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
508 次 |
| 最近记录: |