我尝试在 4 列宽的 ItemsControl 中显示项目(列数现在是任意的),同时支持虚拟化。我知道我可以使用 VirtualizingStackPanel 作为我的 ItemsPanelTemplate,但这会导致我的 ItemsControl 显示单列数据而不是 4 列。
有什么方法可以让我的 ItemsControl 在网格而不是堆栈中显示其内容,同时仍然支持虚拟化?
我目前有以下代码:
`<ScrollViewer Height="800">
<ItemsControl ItemsSource="{Binding Monitors}" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="4"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Background="#102a43" CornerRadius="20" Margin="10 5 10 5">
<Grid ColumnDefinitions="125, 125, 75, 75">
<TextBlock Grid.Column="0" Text="{Binding Name}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="78C" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBox Grid.Column="2" Text="-57C" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBox Grid.Column="3" Text="129C" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>`
我尝试过尝试将我的 DataTemplate 内容放入 VirtualizingStackPanel 中,但这导致我的 ItemsControl 项目根本不显示。
我确信在使用 ItemsControl 进行虚拟化时我缺少一个基本概念。在正确使用虚拟化方面我缺少什么?
您可以使用 Avalonia.Controls.ItemsRepeater NuGet 包中的 ItemsRepeater。 它具有 UniformGridLayout,具有开箱即用的虚拟化功能。