Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1909, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

WPF: gestire il doppio click su una cella di DataGrid

Come sapete, in WPF è disponibile un controllo DataGrid introdotto con il WPF Toolkit per .NET Framework 3.5 SP 1 e che sarà nativamente disponibile in .NET Framework 4.0. Nella attuale Beta 1, è già testabile.

La DataGrid, al contrario della sua equivalente per Windows Forms, non espone un evento per gestire il doppio click in una cella. Tendenzialmente i casi in cui questo è necessario potrebbero non essere molti, magari limitati a campi in sola lettura.

Nel mio caso dovevo gestire questa situazione in una cella contenente una foto, intercettando il doppio click. L'esempio che segue prende in considerazione un'entità Category proveniente da un Entity Data Model con una DataGrid in binding a un entity set chiamato Categories che mappa l'omonima tabella del database Northwind, in cui è presente una colonna Picture. Chiaramente si potrebbero avere classi e collezioni normali, non esposte per il tramite di un EDM.

In rete si trovano diverse soluzioni a questo problema, alcune anche complesse che sfruttano i routed events. Quella che propongo qui è molto essenziale. Si intercetta l'evento MouseDoubleClick per prima cosa. La DataGrid espone una proprietà CurrentCell che rappresenta l'intera riga selezionata. Si gioca sulla proprietà Column di quest'ultima per capire se ci troviamo nel posto desiderato, quindi si ottiene l’istanza dell’oggetto che popola la riga. Di tale oggetto, la proprietà corrispondente alla cella di nostro interesse sarà quella su cui si è fatto doppio click.

Il seguente codice mostra in pratica quanto descritto, con commenti a corredo che spiegano meglio di una descrizione J

    Private Sub CategoriesDataGrid_MouseDoubleClick(ByVal sender As Object,

                                           ByVal e As

                                           System.Windows.Input.

  MouseButtonEventArgs) _

                                           Handles

  CategoriesDataGrid.MouseDoubleClick

        'Ottengo l'istanza della DataGrid

        Dim dg = CType(sender, DataGrid)

 

        'CurrentCell, in realtà, rappresenta la riga

        'Column, la colonna

        'Header, l'intestazione di colonna, che prendiamo in considerazione

        If dg.CurrentCell.Column.Header.ToString = "Picture" Then

        'Header, l'intestazione di colonna, che prendiamo in considerazione

            Dim currentCategory = CType(dg.CurrentCell.Item, Category)

 

            If currentCategory.Picture Is Nothing Then Exit Sub

 

        'Agire qui sulla proprietà Picture

        End If

    End Sub

Notate come la proprietà Header sia convertita in stringa, questo perchè in realtà si tratta di un tipo Object.

Alessandro

Print | posted on domenica 18 ottobre 2009 00:59 | Filed Under [ Visual Basic Windows Presentation Foundation Visual Studio 2010 ]

Powered by:
Powered By Subtext Powered By ASP.NET