【问题标题】:Commit WPF datagrid row when tab is pressed按下选项卡时提交 WPF 数据网格行
【发布时间】:2018-12-13 10:07:32
【问题描述】:

我在我的项目中使用 WPF 微软技术。 我有一个数据网格,它与数据类型 ICollectionViewLiveShaping 的 viewmodel 属性绑定。 我想在按下选项卡时提交数据网格行,底部用于添加项目的行将自动聚焦。 当我按下回车键时,这是自动实现的。 按下选项卡时我也必须这样做。

如果有人在这方面帮助我,我将非常感激。

【问题讨论】:

  • 你有一些代码来显示你到目前为止所做的事情吗?
  • 按下Tab键时焦点在哪里有关系吗?我假设您仍然希望能够将焦点从一个单元移动到另一个单元?还是要保存每次焦点更改时的更改?
  • 您可以使用“CellEditEnding”事件来保存您的更改,当您从一个单元格切换到另一个单元格时会调用它
  • 当键是选项卡时,通过实现一个调用默认 enter-KeyDownEvent 的自己的 KeyDown 事件,当按下选项卡时,您如何简单地“假”输入单击? private void DataGrid_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Tab) { DataGrid_KeyDown(sender, new KeyEventArgs(e.KeyboardDevice, e.InputSource, e.Timestamp, Key.Return)); } }

标签: c# wpf datagrid


【解决方案1】:

如果您想以 MVVM 模式进行操作。 然后将键盘键处理程序绑定到视图模型。 如果是 TAB 键,请使用下面的代码。

List<string> yourCollection = new List<string>(); // your view model collection
ICollectionView yourCollectionView = new CollectionViewSource { Source = yourCollection }.View;
ListCollectionView listCollectionView = (ListCollectionView)CollectionViewSource.GetDefaultView(yourCollectionView);
if (listCollectionView != null)
{
    if (listCollectionView.IsAddingNew)
    {
        listCollectionView.CommitNew();
    }
    if (listCollectionView.IsEditingItem)
    {
        listCollectionView.CommitEdit();
    }
}

如果您想在视图本身中执行此操作,请使用以下代码。

this.ItemsGrid.CommitEdit(); 
this.ItemsGrid.CancelEdit();

如果这对你有帮助,请投票。

【讨论】:

  • 我的问题陈述是:提交该行后,会生成一个空白行,并且该行将被自动选中,并且光标将位于该行的第二列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
相关资源
最近更新 更多