Newsgroup: it.comp.lang.visual-basic
Titolo: [WPF 4 DataGrid] Selezionare tutte le celle di una colonna al click del mouse

Salve a tutti,
in una DataGrid ho la necessità di selezionare tutte le celle di una
colonna, cliccando sull'header.
Poichè il controllo DataGrid sembra non avere una funzione tanto banale
che era presente anche in VB6 (maledetto WPF!!!), sto cercando di
ricrearmi una funzione che mi selezioni una colonna.
Incollo la mia funzione:
 Private Sub SelezionaColonna(ByVal sender As Object, ByVal e As
MouseButtonEventArgs)
        'Gestisce la selezione di tutte le righe di una colonna dopo il
click sull'header della colonna stessa.
        If Not IsSelectingColumn Then
            'Flag che impedisce alla funzione di essere eseguita varie
volte contemporaneamente
            IsSelectingColumn = True
            Dim dep As DependencyObject = DirectCast(e.OriginalSource,
DependencyObject)
            If Not dep Is Nothing Then
                'Ciclo finchè non trovo l'oggetto sul quale ha cliccato
l'utente
                'può essere una cella (DataGridCell) o un Header
(DataGridColumnHeader)
                While Not dep Is Nothing AndAlso Not (TypeOf dep Is
DataGridCell) _
                    AndAlso Not (TypeOf dep Is DataGridColumnHeader)
                    'Oggetto trovato
                    dep = VisualTreeHelper.GetParent(dep)
                End While
                If TypeOf dep Is DataGridColumnHeader Then
                    'L'oggetto è un DataGridColumnHeader.
                    Dim HeaderColonna As DataGridColumnHeader =
TryCast(dep, DataGridColumnHeader)
                    Dim IndexColonna As Integer =
HeaderColonna.Column.DisplayIndex
                    'Azzero la precedente selezione sulla DGRisultati
                    Me.DGRisultati.SelectedCells.Clear()
                    'Procedo con la selezione di tutte le righe della
colonna IndexColonna
                    For IndexCella As Integer = 0 To
Me.DGRisultati.Items.Count - 1
                        Me.DGRisultati.CurrentCell = New
DataGridCellInfo(Me.DGRisultati.Items(IndexCella),
Me.DGRisultati.Columns(IndexColonna))
Me.DGRisultati.SelectedCells.Add(Me.DGRisultati.CurrentCell)
                    Next
                End If
            End If
            'Flag che impedisce alla funzione di essere eseguita varie
volte contemporaneamente
            IsSelectingColumn = False
        End If
    End Sub
Non appena visualizzo il form, se clicco sull'header di una colonna, la
selezione è accettabilmente veloce (ci mette 1 secondo per 10.000 righe).
Se invece clicco su una cella (senza entrare in edit-mode!) e poi clicco
sull'header di una colonna, per selezionare tutto ci mette 10-15 secondi!!!
Qualcuno saprebbe aiutarmi?
Grazie,
Nicola

Mi sembra di aver trovato una spiegazione, però ora mi si apre un nuovo
problema.
In pratica se eseguo il comando
Me.DGRisultati.SelectedCells.Clear()
da un button e poi procedo con il click sull'header di una colonna,
tutto funziona al meglio.
Se invece eseguo lo stesso comando nella funzione (così come presente
nel mio post precedente) si verifica quel problema.
Ora, vorrei capire come posso attendere che il comando finisca il suo
lavoro prima di procedere alla selezione della colonna.
Esiste un qualcosa che mi dice che il comando è terminato?
Devo lavorare di Dispatcher, di eventi o altro?
Nicola