【问题标题】:How to determine whether a WPF DataGrid is in edit mode? [duplicate]如何确定 WPF DataGrid 是否处于编辑模式? [复制]
【发布时间】:2011-03-17 19:24:28
【问题描述】:

可能重复:
Code to check if a cell of a DataGrid is currently edited

有没有办法确定 WPF DataGrid 是否处于编辑模式/当前正在编辑哪一行?

【问题讨论】:

    标签: wpf vb.net datagrid wpfdatagrid editmode


    【解决方案1】:

    VB.NET

    <Extension>
    Public Function GetContainerFromIndex(Of TContainer As DependencyObject) _
        (ByVal itemsControl As ItemsControl, ByVal index As Integer) As TContainer
      Return DirectCast(
        itemsControl.ItemContainerGenerator.ContainerFromIndex(index), TContainer)
    End Function
    
    <Extension>
    Public Function IsEditing(ByVal dataGrid As DataGrid) As Boolean
      Return dataGrid.GetEditingRow IsNot Nothing
    End Function
    
    <Extension>
    Public Function GetEditingRow(ByVal dataGrid As DataGrid) As DataGridRow
      Dim sIndex = dataGrid.SelectedIndex
      If sIndex >= 0 Then
        Dim selected = dataGrid.GetContainerFromIndex(Of DataGridRow)(sIndex)
        If selected.IsEditing Then Return selected
      End If
    
      For i = 0 To dataGrid.Items.Count - 1
        If i = sIndex Then Continue For
        Dim item = dataGrid.GetContainerFromIndex(Of DataGridRow)(i)
        If item.IsEditing Then Return item
      Next
    
      Return Nothing
    End Function
    

    C#:

    public static TContainer GetContainerFromIndex<TContainer>
      (this ItemsControl itemsControl, int index)
        where TContainer : DependencyObject
    {
      return (TContainer)
        itemsControl.ItemContainerGenerator.ContainerFromIndex(index);
    }
    
    public static bool IsEditing(this DataGrid dataGrid)
    {
      return dataGrid.GetEditingRow() != null;
    }
    
    public static DataGridRow GetEditingRow(this DataGrid dataGrid)
    {
      var sIndex = dataGrid.SelectedIndex;
      if (sIndex >= 0)
      {
        var selected = dataGrid.GetContainerFromIndex<DataGridRow>(sIndex);
        if (selected.IsEditing) return selected;
      }
    
      for (int i = 0; i < dataGrid.Items.Count; i++)
      {
        if (i == sIndex) continue;
        var item = dataGrid.GetContainerFromIndex<DataGridRow>(i);
        if (item.IsEditing) return item;
      }
    
      return null;
    }
    

    【讨论】:

      猜你喜欢
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      • 2023-04-10
      • 1970-01-01
      • 2011-06-20
      • 2013-02-08
      • 1970-01-01
      相关资源
      最近更新 更多