当PageUp / PageDown是一个Datagrid时 - ICollectionView如何工作?

时间:2011-06-09 14:12:56

标签: c# .net wpf datagrid wpfdatagrid

我有一项艰巨的任务需要解决。使用WPF Datagrid时,只要您没有任何分组,Paging就可以正常工作。

然而,只要分组进入该位置,就会变得有点棘手。事实上,pageup / down不再正常工作。

我发现一个解决方法是使用以下方法访问dataGrid内部包装的内部滚动查看器:

助手类:

public static class VisualTreeUtilities
    {
        public static T GetVisualChild<T>(Visual parent) where T : Visual
        {
            T child = default(T);
            int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
            for (int i = 0; i < numVisuals; i++)
            {
                Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
                child = v as T;
                if (child == null)
                {
                    child = GetVisualChild<T>(v);
                }
                if (child != null)
                {
                    break;
                }
            }
            return child;
        } 
}

实际代码: 构造函数:

_scrollViewer2 = VisualTreeUtilities.GetVisualChild<ScrollViewer>(this.dataGrid);


private void DataGrid_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            switch (e.Key)
            {
                case Key.PageUp:
                    _scrollViewer2.PageUp();
                    e.Handled = true;
                    break;
             }
         }

这样,尽管使用分组,我仍可完美滚动。剩下的唯一问题是,在向下翻页时,Datagrid不会将实际的selectedItem向下调低,在向下调度时向下调用向上。选择的单元格保持在前一个位置,在分页时不在视线范围内。当所选细胞保留在那里时,我希望它就像excel一样。这意味着当选择第三行的第二个单元格并向下翻页时,仍然会选择第三行的第二个单元格。我怎么能在WPF数据网格中做这样的事情?

我需要了解它的内部运作方式。 ListCollectionView如何知道要向下翻页的行数?如果我知道它如何计算行数,我可以使用相同的原则来计算行并将selectedItem设置为该位置并执行cell.focus()并解决问题。

任何人都可以帮我理解丢失的位吗?

非常感谢,

0 个答案:

没有答案