Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1908, 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

Disabilita cookie ShinyStat

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: data-binding drag & drop con Entity Framework 5

Prendo spunto da un thread transitato nei forum di VB T&T, la cui problematica riguarda la necessità di scrivere codice che carichi dei dati da un database attraverso Entity Framework e li visualizzi in una DataGrid in WPF attraverso il drag'n'drop.

Di questo tipo di tecnica basilare ne parlammo quasi 4 anni fa, con VS 2010 Beta 1. L'evoluzione del tutto ha riguardato anche l'Entity Framework, ormai da un po' basato sull'approccio noto come Code First e sulla classe DbContext.

Se usiamo Visual Studio 2012 avremo a che fare con questo tipo di modeling e ciò riguarda anche WPF. I passaggi sono sintetizzabili così:

  1. creo il progetto WPF (dai? )
  2. aggiungo l'Entity Data Model
  3. apro la finestra Data Sources e clicco su Add Data Source. A differenza del passato, le entità in EF 5 non godono del riconoscimento automatico nella finestra in questione e Visual Studio 2012 non genera del codice di default. Che forse è un bene.
  4. Nel wizard, seleziono Object
  5. Dall'elenco di oggetti seleziono i nomi delle entità di mio interesse
  6. Dalla finestra Data Sources trascino quella di mio interesse, in questo caso diciamo una che rappresenti dei dati in forma tabulare
  7. Visual Studio 2012 genera tutto il codice XAML necessario e utilizza i soliti oggetti CollectionViewSource

Ipotizzando di avere il database dimostrativo Northwind e la tabella Customers, potremmo sostituire (ad esempio) il codice di default con il seguente:

Imports System.Linq, System.Data.Entity   Class MainWindow       Private northwind As NorthwindEntities       Private Sub Window_Loaded(sender As Object, e As RoutedEventArgsHandles MyBase.Loaded         Me.northwind = New NorthwindEntities         Dim CustomerViewSource As System.Windows.Data.CollectionViewSource =             CType(Me.FindResource("CustomerViewSource"), System.Windows.Data.CollectionViewSource)         'Load data by setting the CollectionViewSource.Source property:         Me.northwind.Customers.Load()           CustomerViewSource.Source = Me.northwind.Customers.Local     End Sub End Class
Punti fondamentali:

  1. Devo importare System.Data.Entity, che definisce alcuni metodi extension
  2. Carico il contenuto della mia tabella attraverso il metodo Load, che è un extension per la classe DbSet
  3. La proprietà di tipo DbSet, in questo caso Customers, è ora popolata. Posso usare la sua proprietà Local in binding con la Source della CollectionViewSource. Local è di tipo ObservableCollection(Of T) ed è molto utile poiché rappresenta, in memoria, l'elenco degli oggetti già caricati comprensivo di quelli aggiunti, modificati e rimossi prima che questi vadano ad essere persistiti nel database.

Alessandro

Print | posted on martedì 9 luglio 2013 23:27 | Filed Under [ Windows Presentation Foundation Visual Studio 2012 ]

Powered by:
Powered By Subtext Powered By ASP.NET