Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 当DataGrid处于编辑模式时,是否有方法阻止用户选择另一行?_Wpf_Datagrid_Selection_Selector - Fatal编程技术网

Wpf 当DataGrid处于编辑模式时,是否有方法阻止用户选择另一行?

Wpf 当DataGrid处于编辑模式时,是否有方法阻止用户选择另一行?,wpf,datagrid,selection,selector,Wpf,Datagrid,Selection,Selector,我希望,如果单元格/行进入编辑模式,那么,如果用户尝试选择其他行,它应该尝试提交该行,如果该行未成功提交,它应该拒绝选择请求,并且编辑行应该保持选中状态并处于编辑模式 你有经验找个好帮手吗?有什么好办法吗 注意:我已经为这个问题挣扎了很长一段时间,并且已经获得了一些经验,所以请只发布工作示例,而不是随意的想法。下面的代码包括扩展自(代码规范化以适合StackOverflow screen witdh,抱歉) 用法: <DataGrid Name="dg" src:DataGridSelec

我希望,如果单元格/行进入编辑模式,那么,如果用户尝试选择其他行,它应该尝试提交该行,如果该行未成功提交,它应该拒绝选择请求,并且编辑行应该保持选中状态并处于编辑模式

你有经验找个好帮手吗?有什么好办法吗


注意:我已经为这个问题挣扎了很长一段时间,并且已经获得了一些经验,所以请只发布工作示例,而不是随意的想法。

下面的代码包括扩展自(代码规范化以适合StackOverflow screen witdh,抱歉)

用法:

<DataGrid Name="dg"
src:DataGridSelectionChangingBehavior.EnableSelectionChanging="True" 
src:DataGridSelectionChangingBehavior.SelectionChanging="dg_SelectionChanging">
注意:VisualStudio可能不会在intellisense中显示该事件,甚至可能会生成设计时错误,但它应该能够完美地编译和工作


仅供参考:已修改代码格式以适应SO屏幕。

下面的代码包括扩展自(代码规范化以适应StackOverflow屏幕,对不起)

用法:

<DataGrid Name="dg"
src:DataGridSelectionChangingBehavior.EnableSelectionChanging="True" 
src:DataGridSelectionChangingBehavior.SelectionChanging="dg_SelectionChanging">
注意:VisualStudio可能不会在intellisense中显示该事件,甚至可能会生成设计时错误,但它应该能够完美地编译和工作

仅供参考:修改代码格式以适应SO屏幕

Private Sub dg_SelectionChanging(ByVal sender As Object, 
    ByVal e As SelectionChangingEventArgs)
  If e.CurrentRow.IsEditing Then
    Dim item = TryCast(e.CurrentRow.Item, MyEntityType)

    If item IsNot Nothing AndAlso item.IsValid Then
      Dim dataGrid = DirectCast(sender, DataGrid)
      Dim committed = dataGrid.CommitEdit(DataGridEditingUnit.Row, True)
      If committed Then Exit Sub
    End If
    e.Cancel = True
  End If
End Sub