当用户按下箭头键时,这是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);
}
- 2 回答
- 0 关注
- 152 浏览
添加回答
举报
0/150
提交
取消