Никто не подошел к этому, поэтому, много поработав, я нашел следующее решение.Я создал преобразователь с несколькими значениями, взяв в качестве параметров текущую CollectionViewGroup, весь ListCollectionView и DataGrid.
Public Class GroupLevelConverter
Implements IMultiValueConverter
Public Function Convert(values() As Object, targetType As System.Type,
parameter As Object, culture As System.Globalization.CultureInfo
) As Object Implements System.Windows.Data.IMultiValueConverter.Convert
If TypeOf values(0) Is CollectionViewGroup Then
Dim level As Integer = 0
Dim parent As CollectionViewGroup = values(0)
Do While parent IsNot Nothing
parent = GetParent(values(0))
values(0) = parent
If parent IsNot Nothing Then
level += 1
End If
Loop
Dim s As String = ""
For i = 1 To level - 1
s += " "
Next
Dim lcv As ListCollectionView = DirectCast(values(1), ListCollectionView)
Dim pgd As System.Windows.Data.PropertyGroupDescription = lcv.GroupDescriptions(level - 1)
Dim dg As DataGrid = values(2)
Dim GroupHeader As String = pgd.PropertyName
For c = 0 To dg.Columns.Count - 1
If dg.Columns(c).SortMemberPath = GroupHeader Then
GroupHeader = dg.Columns(c).Header
Exit For
End If
Next
s = s & GroupHeader & ": "
Return (s)
End If
Return ""
End Function
Public Function ConvertBack(value As Object, targetTypes() As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object() Implements System.Windows.Data.IMultiValueConverter.ConvertBack
Throw New NotSupportedException("Not implemented")
End Function
Friend Function GetParent(currentViewGroup As CollectionViewGroup) As CollectionViewGroup
Dim parent As CollectionViewGroup
Try
parent = TryCast(currentViewGroup.[GetType]().GetProperty("Parent", System.Reflection.BindingFlags.GetProperty Or
System.Reflection.BindingFlags.Instance Or
System.Reflection.BindingFlags.NonPublic).GetValue(currentViewGroup, Nothing),
CollectionViewGroup)
Catch ex As Exception
Return Nothing
End Try
Return parent
End Function
End Class
CollectionViewGroup используется для поиска своего родителя с помощью функции GetParent.Это не элегантная часть решения, поскольку она основывается на обнаружении ошибки.Функция вызывается до тех пор, пока ошибка не покажет достижение верхней группы.
ListCollectionView используется для получения столбца сортировки, а DataGrid - для более удобного заголовка столбца.похожая проблема.