DataGrid';如果在TabControl上编辑和切换选项卡,则新行将消失
本文关键字:选项 消失 新行 如果 编辑 TabControl DataGrid | 更新日期: 2023-09-27 18:20:18
我的应用程序中有一个通过XAML创建的WPF TabControl对象。也是通过XAML创建的,是一个包含DataGrid的TabItem。在我的应用程序中,用户可以为该TabControl创建新的选项卡。当这种情况发生时,将为该新TabItem创建一个DataGrid。因此,即使我通过XAML只创建了一个带有DataGrid的TabItem,应用程序最终也可能包含多个带有DataGrids的TabItem。
我看到一个问题,如果用户想在DataGrid中添加新行,但随后决定切换到另一个选项卡,则当用户返回到该选项卡时,DataGrid将丢失新行。因此,无法向DataGrid添加新行。奇怪的是,这个问题只发生在为动态TabItems动态创建的DataGrids上。因此,通过XAML创建的DataGrid中不存在此问题。以前有人看过这个问题吗?
在更改选项卡之前,似乎需要提交网格中的所有编辑。这里有一个很好的变通方法,我觉得很有用:
// PreviewMouseDown event handler on the TabControl
private void TabControl_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if (IsUnderTabHeader(e.OriginalSource as DependencyObject))
CommitTables(yourTabControl);
}
private bool IsUnderTabHeader(DependencyObject control)
{
if (control is TabItem)
return true;
DependencyObject parent = VisualTreeHelper.GetParent(control);
if (parent == null)
return false;
return IsUnderTabHeader(parent);
}
private void CommitTables(DependencyObject control)
{
if (control is DataGrid)
{
DataGrid grid = control as DataGrid;
grid.CommitEdit(DataGridEditingUnit.Row, true);
return;
}
int childrenCount = VisualTreeHelper.GetChildrenCount(control);
for (int childIndex = 0; childIndex < childrenCount; childIndex++)
CommitTables(VisualTreeHelper.GetChild(control, childIndex));
}
事实证明,有一个问题与Stack Overflow上的这个问题非常相似。这里有一个链接。公认的答案是为我解决问题的答案。
TabControl与Datagrid