AvaloniaUI Items控制虚拟化

问题描述 投票:0回答:1

我尝试在 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 进行虚拟化时我缺少一个基本概念。在正确使用虚拟化方面我缺少什么?

c# avaloniaui avalonia
1个回答
0
投票

您可以使用 Avalonia.Controls.ItemsRepeater NuGet 包中的 ItemsRepeater。 它具有 UniformGridLayout,具有开箱即用的虚拟化功能。

© www.soinside.com 2019 - 2024. All rights reserved.