- modificata EgwDataGrid per funzionare correttamente (header) anche quando non e' visibile dall'inizio
This commit is contained in:
@@ -122,6 +122,46 @@ Public Class EgwDataGrid
|
||||
|
||||
Private ReadOnly _columnToLayout As New Dictionary(Of DataGridColumn, ColumnLayout)
|
||||
|
||||
Private _headersCaptured As Boolean = False
|
||||
|
||||
Sub New()
|
||||
AddHandler Me.Loaded, AddressOf OnDataGridLoaded
|
||||
AddHandler Columns.CollectionChanged, AddressOf OnColumnsChanged
|
||||
End Sub
|
||||
|
||||
Private Sub OnDataGridLoaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
|
||||
TryHookPresenter()
|
||||
End Sub
|
||||
|
||||
Private Sub TryHookPresenter()
|
||||
Dim presenter = FindVisualChild(Of DataGridColumnHeadersPresenter)(Me)
|
||||
If presenter Is Nothing Then Return
|
||||
AddHandler presenter.ItemContainerGenerator.StatusChanged, AddressOf OnHeadersGenerated
|
||||
End Sub
|
||||
|
||||
Private Sub OnHeadersGenerated(ByVal sender As Object, ByVal e As EventArgs)
|
||||
If _headersCaptured Then Return
|
||||
Dim presenter = FindVisualChild(Of DataGridColumnHeadersPresenter)(Me)
|
||||
If presenter Is Nothing Then Return
|
||||
|
||||
If presenter.ItemContainerGenerator.Status = GeneratorStatus.ContainersGenerated Then
|
||||
_headersCaptured = True
|
||||
RemoveHandler presenter.ItemContainerGenerator.StatusChanged, AddressOf OnHeadersGenerated
|
||||
|
||||
For i As Integer = 0 To Columns.Count - 1
|
||||
Dim header = TryCast(presenter.ItemContainerGenerator.ContainerFromIndex(i), DataGridColumnHeader)
|
||||
|
||||
If header IsNot Nothing Then
|
||||
OnColumnHeaderCreated(header)
|
||||
End If
|
||||
Next
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Protected Overridable Sub OnColumnHeaderCreated(ByVal header As DataGridColumnHeader)
|
||||
GenerateHeaderEvents(header.Column, _columnToLayout(header.Column))
|
||||
End Sub
|
||||
|
||||
Private Sub Layouts_CollectionChanged(sender As Object, e As NotifyCollectionChangedEventArgs)
|
||||
Select Case e.Action
|
||||
Case NotifyCollectionChangedAction.Add
|
||||
@@ -154,6 +194,11 @@ Public Class EgwDataGrid
|
||||
End Select
|
||||
End Sub
|
||||
|
||||
Private Sub OnColumnsChanged(ByVal sender As Object, ByVal e As NotifyCollectionChangedEventArgs)
|
||||
_headersCaptured = False
|
||||
TryHookPresenter()
|
||||
End Sub
|
||||
|
||||
Private Sub AddColumnFromLayout(layout As ColumnLayout)
|
||||
If Resources.Contains(layout.Key) Then
|
||||
Dim baseColumn As DataGridColumn = TryCast(Resources(layout.Key), DataGridColumn)
|
||||
@@ -189,9 +234,11 @@ Public Class EgwDataGrid
|
||||
If _columnToLayout.TryGetValue(args.Column, l) Then l.SortDirection = args.Column.SortDirection
|
||||
End Sub
|
||||
|
||||
GenerateHeaderEvents(column, layout)
|
||||
UpdateDisplayIndexes()
|
||||
End If
|
||||
Else
|
||||
ColumnLayouts.Remove(layout)
|
||||
MessageBox.Show("Errore! Tentativo di caricare una colonna non definita!" & Environment.NewLine & " Column Key: " & layout.Key, "Errore!", MessageBoxButton.OK, MessageBoxImage.Error)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
|
||||
Reference in New Issue
Block a user