首页 > 解决方案 > Datagrid UI 虚拟化,最后一项最初显示在底部

问题描述

我有一个DataGridids 以从上到下的升序显示。然而,最后一个 ids(hightest number) 必须最初显示,但仍然在DataGrid. 这意味着您必须滚动到顶部才能显示旧 ID。

是否有可能在虚拟化仍然完好无损的情况下做到这一点?

我们正在使用 sfdatagrid(syncfusion)。但是,如果任何其他网格(包括 wpf 本机网格)涵盖了这个,我可以调查一下

标签: c#wpfdatagrid

解决方案


是否有可能在虚拟化仍然完好无损的情况下做到这一点?

是的。至少使用内置DataGrid控件。在创建任何容器之前,只需滚动到底部即可。请参考以下示例代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        numberGrid.ItemsSource = Enumerable.Range(1, 100);
        numberGrid.ScrollIntoView(numberGrid.Items[numberGrid.Items.Count - 1]);
    }

    int n = 0;
    private void DataGridRow_Loaded(object sender, RoutedEventArgs e)
    {
        txt.Text = (n++).ToString();
    }
}

XAML:

<DataGrid x:Name="dg" Height="200">
    <DataGrid.ItemContainerStyle>
        <Style TargetType="DataGridRow">
            <EventSetter Event="Loaded" Handler="DataGridRow_Loaded" />
        </Style>
    </DataGrid.ItemContainerStyle>
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding}" />
    </DataGrid.Columns>
</DataGrid>

<TextBlock x:Name="txt" />

可视化树中仅加载了 11 个容器:

在此处输入图像描述


推荐阅读