为了账号安全,请及时绑定邮箱和手机立即绑定

在Key.Down事件上的DataGrid中选择第一项(在列表中)

在Key.Down事件上的DataGrid中选择第一项(在列表中)

C#
UYOU 2021-04-09 17:19:49
当用户按下箭头键时,这是Key.Down事件,我正在尝试在Datagrid中选择第一行。它现在可以正常工作,但是即使我通过索引[0],它仍会以某种方式选择第二行...我创建了SelectRowByIndex方法,该方法应该选择Datagrid的第一行,如下所示:private static void SelectRowByIndex(DataGrid dataGrid, int rowIndex)        {            if (!dataGrid.SelectionUnit.Equals(DataGridSelectionUnit.FullRow))                throw new ArgumentException("The SelectionUnit of the DataGrid must be set to FullRow.");            if (rowIndex < 0 || rowIndex > (dataGrid.Items.Count - 1))                throw new ArgumentException(string.Format("{0} is an invalid row index.", rowIndex));            dataGrid.SelectedItems.Clear();            object item = dataGrid.Items[rowIndex];            dataGrid.SelectedItem = item;            DataGridRow row = dataGrid.ItemContainerGenerator.ContainerFromIndex(rowIndex) as DataGridRow;            if (row == null)            {                //Moram dodati BillItemTemp u slučaju da je virtualized away                dataGrid.ScrollIntoView(item);                row = dataGrid.ItemContainerGenerator.ContainerFromIndex(rowIndex) as DataGridRow;            }            if (row != null)            {                DataGridCell cell = GetCell(dataGrid, row, 0);                if (cell != null)                    cell.Focus();            }        }          之后,在加载表单时,我在构造函数中调用了它: this.PreviewKeyDown += (s, e) => {        if (e.Key == Key.Down && dtgProducts.HasItems)          SelectRowByIndex(dtgProducts, 0); };但是以某种方式选择第二行?而不是第一个...怎么来的?而且,当我不断按下Key.Down时不要一直选择同一行,我需要确保自己的安全。
查看完整描述

2 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

您正在与WPF战斗。你不会赢。用这种方法填充时,WPF不喜欢它。它通常希望您使用数据绑定。


您可以使用viewmodels和databinding来做到这一点(如果您有兴趣的话,可以添加此答案的先前版本),但这并不困难。


private static void SelectRowByIndex(DataGrid dataGrid, int rowIndex)

{

    //  Or set this in XAML better yet

    dataGrid.IsSynchronizedWithCurrentItem = true;


    var view = CollectionViewSource.GetDefaultView(dataGrid.ItemsSource);


    view.MoveCurrentToPosition(rowIndex);

}


查看完整回答
反对 回复 2021-04-17
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

假设您的意思是使用向下箭头键,则您做出了一个非常糟糕的选择。采取任何数据网格。
单击一行。
按向下箭头。
焦点移至下一行。

查看完整回答
反对 回复 2021-04-17
  • 2 回答
  • 0 关注
  • 152 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信