添加行时WPF DataGrid会跳过页面

时间:2014-02-18 22:46:15

标签: c# wpf xaml wpfdatagrid

我有一个可能显示多行数据的DataGrid(> 1,000,000),因此我尝试实现一种机制,当用户在当前数据底部附近滚动时,该机制将加载数据。我认为我已经正确实现了它,但是我看到一个特殊的问题,如果我在我的鼠标周围使用滚轮来获取下一页数据,那么视口将自动转到下一个底部附近刚刚加载的页面。每次都不会发生这种情况,使用键盘浏览DataGrid时也不会发生这种情况。

我在下面添加了简化代码,可以重现我的问题。请注意,我使用BinderList和DataTable作为ItemsSource,具有相同的效果。此外,我知道我在这里没有任何保护措施来触及数据源的末尾,我也没有很多生产代码需要的检查。这主要是概念代码的证明。

C#:

public partial class MainWindow : Window
{

    public ObservableCollection<int> TableData
    {
        get
        {
            return _myTable;
        }
    }

    ...

    private void DG1_LoadingRow(object sender, DataGridRowEventArgs e)
    {
        if (_currentRow - RowBufferSize < e.Row.GetIndex())
        {
            AddPageToTable();
        }
    }

    private bool AddPageToTable()
    {
        for (int i = 0; i < PageSize; i++)
        {
            _myTable.Add(_newDataEnumerator.Current);
            _newDataEnumerator.MoveNext();
            _currentRow++;
        }
        return true;
    }
}

XAML:

<DataGrid Name="DG1" ItemsSource="{Binding TableData}" AutoGenerateColumns="True" LoadingRow="DG1_LoadingRow">
   <DataGrid.Columns>
      <DataGridTextColumn Header="Data"  Binding="{Binding}" Width="400"/>
   </DataGrid.Columns>
</DataGrid> 

导致这种随机跳过的错误是什么,或者我有什么办法阻止视口转移到我身上?

0 个答案:

没有答案