gpt4 book ai didi

wpf - Datagrid 将焦点设置在新添加的行上

转载 作者:行者123 更新时间:2023-12-04 12:43:34 26 4
gpt4 key购买 nike

我有一个绑定(bind)到可观察集合的数据网格。
当用户按下“添加按钮”时,它会添加一个新行,我通过向 observablecollection 添加一个新元素来做到这一点。

我不知道如何使新添加的行与第一个单元格成为焦点,就像我们正在编辑一样。我正在使用 MVVM 模式。

有什么想法或建议吗?

最佳答案

The answer given by Gauss是正确的方法,但有一些代码,它更清楚:

void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Loaded += Row_Loaded;
}

void Row_Loaded(object sender, RoutedEventArgs e)
{
var row = (DataGridRow) sender;
row.Loaded -= Row_Loaded;
DataGridCell cell = GetCell(dataGrid, row, 0);
if (cell != null) cell.Focus();
dataGrid.BeginEdit();
}

static DataGridCell GetCell(DataGrid dataGrid, DataGridRow row, int column)
{
if (dataGrid == null) throw new ArgumentNullException("dataGrid");
if (row == null) throw new ArgumentNullException("row");
if (column < 0) throw new ArgumentOutOfRangeException("column");

DataGridCellsPresenter presenter = FindVisualChild<DataGridCellsPresenter>(row);
if (presenter == null)
{
row.ApplyTemplate();
presenter = FindVisualChild<DataGridCellsPresenter>(row);
}
if (presenter != null)
{
var cell = presenter.ItemContainerGenerator.ContainerFromIndex(column) as DataGridCell;
if (cell == null)
{
dataGrid.ScrollIntoView(row, dataGrid.Columns[column]);
cell = presenter.ItemContainerGenerator.ContainerFromIndex(column) as DataGridCell;
}
return cell;
}
return null;
}

static T FindVisualChild<T>(DependencyObject obj) where T : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
var visualChild = child as T;
if (visualChild != null)
return visualChild;
var childOfChild = FindVisualChild<T>(child);
if (childOfChild != null)
return childOfChild;
}
return null;
}

您检索 DataGrid.LoadingRow 中的行事件,但该单元格尚不可用。因此,您在 Loaded 上放置了一个处理程序事件以等待此事件发生,然后您可以检索单元格并将焦点放在它上面。

处理程序被删除以避免新的触发。

编辑 session 也可以用 dataGrid.BeginEdit() 开始。 .

所有这些都在代码隐藏中,因为它属于 View 。

关于wpf - Datagrid 将焦点设置在新添加的行上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3307918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com