> Tech > Liaison à  des objets locaux

Liaison à  des objets locaux

Tech - Par Renaud ROSSET - Publié le 30 novembre 2010
email

Pour tirer pleinement parti des nouveautés de Silverlight, votre application a besoin d’un objet que vous pouvez étoffer avec des attributs relatifs aux données. Pour cela, j’ai créé un objet LocalCustomer qui a dupliqué les propriétés de l’objet Customer à afficher dans mon interface utilisateur.
Dans le cadre

Liaison à  des objets locaux

de mon exemple, j’ai défini seulement trois propriétés, à savoir CustomerId, ContactName et CompanyName. Le début de la classe, avec la propriété CompanyName, a l’aspect suivant :

Public Class LocalCustomer
Private _CompanyName As String
Private _CustomerId As String
Private _ContactName As String
Public Property CompanyName() As String
Get
Return _CompanyName
End Get
Set(ByVal value As String)
_CompanyName = value
End Set
End Property

Pour gérer la conversion de l’objet Customer (retourné par mon service) en objet LocalCustomer (utilisé dans mon projet Silverlight), je devrais normalement créer une classe de conversion. Malheureusement, l’attribut nécessaire pour les classes de conversion n’est pas encore géré dans Silverlight 3. J’ai donc été contraint d’ajouter du code pour l’événement déclenché une fois les objets Customer retournés par le service. Ce code crée un objet LocalCustomer pour chaque objet Customer et le joint à une Observable Collection. Une fois la collection créée, j’ai employé la propriété CurrentItem du DataForm pour l’affichage de la première entité dans la collection :

Private custs As New System.Collections.ObjectModel. _
ObservableCollection(Of LocalCustomer)
Private Sub nwd_GetCustomersCompleted( _
ByVal sender As Object, ByVal e As _
NorthwindData.GetCustomersCompletedEventArgs) _
Handles nwd.GetCustomersCompleted
Dim lc As LocalCustomer
For Each cust As NorthwindData.Customer In e.Result
lc = New LocalCustomer
lc.CompanyName = cust.CompanyName
lc.CustomerId = cust.CustomerId
lc.ContactName = cust.ContactName
custs.Add(lc)
Next
MyDataForm.CurrentItem = custs(0)
End Sub

Pour que toute la collection soit accessible au DataForm, je crée d’abord une propriété dans MainPage qui retourne la ObservableCollection d’objets LocalCustomer. Puis dans l’événement Loaded de MainPage, je définis la classe XAML pour DataContext :

Public ReadOnly Property Customers() As _
System.Collections.ObjectModel. _
ObservableCollection(Of LocalCustomer)
Get
If custs IsNot Nothing Then
Return custs
Else
Return Nothing
End If
End Get
End Property
Private Sub MainPage_Loaded(ByVal sender As Object, _
ByVal e As System.Windows.RoutedEventArgs) _
Handles Me.Loaded
nwd = New NorthwindData.NorthwindDataSoapClient( _
bind, ep)
nwd.GetCustomersAsync()
Me.DataContext = Me
End Sub

Avec ces modifications, je peux, dans le fichier .XAML, lier le DataForm à la collection retournée par ma nouvelle propriété au moyen de l’attribut ItemsSource du DataForm:


Name="MyDataForm">

La solution est très basique à ce stade et, par exemple, elle ne gère pas la validation des données ou l’appel de la méthode sur le service qui gère les mises à jour. Silverlight 3 propose deux approches pour inclure ces activités, à savoir étendre le DataForm ou étendre l’objet local.

Téléchargez cette ressource

Préparer l’entreprise aux technologies interconnectées

Préparer l’entreprise aux technologies interconnectées

Avec la « quatrième révolution industrielle », les environnements hyperconnectés entraînent de nouveaux risques en matière de sécurité. Découvrez, dans ce guide Kaspersky, comment faire face à cette nouvelle ère de vulnérabilité.

Tech - Par Renaud ROSSET - Publié le 30 novembre 2010