Procedura dettagliata: associazione di controlli Silverlight agli oggetti
In questa procedura dettagliata viene creata un'applicazione Silverlight contenente controlli associati a dati. I controlli vengono associati a 2 oggetti business correlati definiti dall'utente.
In questa procedura dettagliata vengono illustrate le attività seguenti:
Creazione di un'applicazione Silverlight.
Creazione di 2 oggetti personalizzati correlati da associare all'interfaccia utente.
Esecuzione della Configurazione guidata origine dati per la connessione all'oggetto personalizzato utilizzato per popolare la finestra Origini dati.
Creazione di un set di controlli associati a dati mediante il trascinamento degli elementi dalla finestra Origini dati a Silverlight Designer.
Nota
Nomi o percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti potrebbero essere diversi nel computer in uso. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per altre informazioni vedere Personalizzazione delle impostazioni di sviluppo in Visual Studio.
Prerequisiti
Per completare la procedura dettagliata, è necessario disporre dei componenti seguenti:
- Visual Studio
Per completare la procedura dettagliata è inoltre consigliabile conoscere già i concetti seguenti:
Utilizzo di Silverlight Designer. Per ulteriori informazioni, vedere Silverlight (la pagina potrebbe essere in inglese).
Associazione a dati Silverlight. Per ulteriori informazioni, vedere Associazione dati (la pagina potrebbe essere in inglese).
Utilizzo di XAML. Per ulteriori informazioni, vedere XAML (la pagina potrebbe essere in inglese).
Creazione dell'applicazione Silverlight
Iniziare questa procedura dettagliata creando un'applicazione Silverlight.
Per creare il progetto Silverlight
Scegliere il comando per la creazione di un nuovo progetto dal menu File.
Nel nodo Visual C# o Visual Basic fare clic su Silverlight, quindi su Applicazione Silverlight.
Nella casella Nome digitare SilverlightObjectBinding, quindi fare clic su OK.
Lasciare le impostazioni predefinite nella finestra di dialogo Nuova applicazione Silverlight, quindi fare clic su OK.
L'applicazione Silverlight viene creata come soluzione con 2 progetti: un progetto SilverlightObjectBinding e un progetto SilverlightObjectBinding.Web, utilizzati per ospitare il progetto SilverlightObjectBinding.
Creazione di oggetti personalizzati da associare
Per esporre dati a un'applicazione, è necessario che sia definito un modello dati. In questa procedura dettagliata vengono creati oggetti personalizzati che rappresentano clienti e ordini per il modello dati.
Per creare gli oggetti Customer
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto SilverlightObjectBinding, scegliere Aggiungi, quindi fare clic su Nuovo elemento.
Nella finestra di dialogo Aggiungi nuovo elemento fare clic sull'elemento Classe.
Denominarlo Customer e fare clic su Aggiungi.
Nel file di codice Customer sostituire il codice nella classe Customer con il codice seguente:
''' <summary> ''' A single customer ''' </summary> Public Class Customer Public Sub New() End Sub ''' <summary> ''' Creates a new customer ''' </summary> ''' <param name="customerId">The ID that uniquely identifies this customer</param> ''' <param name="companyName">The name for this customer</param> ''' <param name="city">The city for this customer</param> Public Sub New(ByVal customerId As String, ByVal companyName As String, ByVal city As String) customerIDValue = customerId companyNameValue = companyName cityValue = city End Sub Private customerIDValue As String ''' <summary> ''' The ID that uniquely identifies this customer ''' </summary> Public Property CustomerID() As String Get Return customerIDValue End Get Set(ByVal value As String) customerIDValue = value End Set End Property Private companyNameValue As String ''' <summary> ''' The name for this customer ''' </summary> Public Property CompanyName() As String Get Return companyNameValue End Get Set(ByVal Value As String) companyNameValue = Value End Set End Property Private cityValue As String ''' <summary> ''' The city for this customer ''' </summary> Public Property City() As String Get Return cityValue End Get Set(ByVal Value As String) cityValue = Value End Set End Property Private ordersValue As Orders ''' <summary> ''' The orders for this customer ''' </summary> Public Property Orders As Orders Get Return ordersValue End Get Set(ByVal value As Orders) ordersValue = value End Set End Property Public Overrides Function ToString() As String Return Me.CompanyName & " (" & Me.CustomerID & ")" End Function End Class ''' <summary> ''' A collection of Customer objects. ''' </summary> ''' <remarks></remarks> Public Class Customers Inherits System.Collections.Generic.List(Of Customer) End Class
/// <summary> /// A single customer /// </summary> public class Customer { /// <summary> /// Creates a new customer /// </summary> public Customer() { } /// <summary> /// Creates a new customer /// </summary> /// <param name="customerID"></param> /// <param name="companyName"></param> /// <param name="city"></param> public Customer(string customerID, string companyName, string city) { customerIDValue = customerID; companyNameValue = companyName; cityValue = city; } private string customerIDValue; /// <summary> /// The ID that uniquely identifies this customer /// </summary> public string CustomerID { get { return customerIDValue; } set { customerIDValue = value; } } private string companyNameValue; /// <summary> /// The name for this customer /// </summary> public string CompanyName { get { return companyNameValue; } set { companyNameValue = value; } } private string cityValue; /// <summary> /// The city for this customer /// </summary> public string City { get { return cityValue; } set { cityValue = value; } } private Orders ordersValue; /// <summary> /// The orders for this customer /// </summary> public Orders Orders { get { return ordersValue; } set { ordersValue = value; } } public override string ToString() { return this.CompanyName + " (" + this.CustomerID + ")"; } } /// <summary> /// A collection of Customer objects /// </summary> public class Customers : System.Collections.Generic.List<Customer> { }
Per creare gli oggetti Orders
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto SilverlightObjectBinding, scegliere Aggiungi, quindi fare clic su Nuovo elemento.
Nella finestra di dialogo Aggiungi nuovo elemento fare clic sull'elemento Classe.
Denominarlo Order e fare clic su Aggiungi.
Nel file di codice Order sostituire il codice nella classe Order con il codice seguente:
''' <summary> ''' A single order ''' </summary> Public Class Order Public Sub New() End Sub ''' <summary> ''' Creates a new order ''' </summary> ''' <param name="orderid">The identifier for this order</param> ''' <param name="customerID">The customer who placed this order</param> Public Sub New(ByVal orderid As Integer, ByVal customerID As String) orderIDValue = orderid customerIDValue = customerID End Sub Private orderIDValue As Integer ''' <summary> ''' Identifier for this order ''' </summary> Public Property OrderID() As Integer Get Return orderIDValue End Get Set(ByVal value As Integer) orderIDValue = value End Set End Property Private customerIDValue As String ''' <summary> ''' The customer who placed this order ''' </summary> Public Property CustomerID() As String Get Return customerIDValue End Get Set(ByVal Value As String) customerIDValue = Value End Set End Property End Class ''' <summary> ''' A collection of Orders ''' </summary> Public Class Orders Inherits System.Collections.Generic.List(Of Order) End Class
/// <summary> /// A single order /// </summary> public class Order { /// <summary> /// Creates a new order /// </summary> /// <param name="orderid"></param> /// <param name="customerID"></param> public Order(int orderid, string customerID) { orderIDValue = orderid; customerIDValue = customerID; } private int orderIDValue; /// <summary> /// The ID that uniquely identifies this order /// </summary> public int OrderID { get { return orderIDValue; } set { orderIDValue = value; } } private string customerIDValue; /// <summary> /// The customer who placed this order /// </summary> public string CustomerID { get { return customerIDValue; } set { customerIDValue = value; } } } /// <summary> /// A collection of Order objects /// </summary> public class Orders : System.Collections.Generic.List<Order> { }
Compilare il progetto.
Creazione dell'origine dati oggetto
Creare un'origine dati oggetto e inserire dati nella finestra Origini dati eseguendo la Configurazione guidata origine dati.
Per creare l'origine dati oggetto
Scegliere Mostra origini dati dal menu Dati.
Nella finestra Origini dati fare clic su Aggiungi nuova origine dati.
Viene visualizzata la Configurazione guidata origine dati.
Nella pagina Seleziona un tipo di origine dati fare clic su Oggetto, quindi su Avanti.
Nella pagina Selezionare gli oggetti dati espandere due volte la visualizzazione struttura ad albero, quindi selezionare la casella di controllo accanto a Customers.
Nota
Assicurarsi di selezionare Customers e non la forma singolare Customer.Se Customers non è disponibile, chiudere la procedura guidata e ricompilare la soluzione.
Fare clic su Fine.
La finestra Origini dati viene popolata con l'origine dati oggetto.
Creazione dei controlli associati a dati
Creare controlli che consentono di visualizzare i dati negli oggetti tramite trascinamento dei nodi Clienti e Ordini dalla finestra Origini dati alla finestra di progettazione.
Per creare i controlli associati a dati
Aprire il file MainPage.xaml in visualizzazione Progettazione.
Dalla finestra Origini dati trascinare il nodo Clienti nella finestra di progettazione.
Dalla finestra Origini dati trascinare il nodo Ordini nella finestra di progettazione sotto la griglia dei clienti.
Inserire i dati negli oggetti e associarli alla CollectionViewSource generata
Poiché in questa procedura dettagliata vengono utilizzati oggetti personalizzati come modello dati, i dati di esempio vengono creati e caricati quando viene visualizzata la pagina Silverlight.
Dopo avere trascinato un'origine dati oggetto dalla finestra Origini dati, viene generato un commento del codice per consentire di configurare l'origine dati in modo che punti all'oggetto personalizzato. Rimuovere il commento del codice generato e impostare System.Windows.Data.CollectionViewSource.Source (myCollectionViewSource) in modo che punti alla raccolta di oggetti dati. Nella procedura riportata di seguito viene illustrato come modificare il codice generato per associarlo ai controlli generati.
Ogni volta che si trascinano elementi dalla finestra Origini dati nella finestra di progettazione, viene generato un System.Windows.Data.CollectionViewSource sulla pagina Silverlight. Il nome si basa sull'origine dati in uso. Sostituire il commento: 'Resource Key for CollectionViewSource' con CustomersViewSource o customerViewSource, a seconda del linguaggio.
Per inserire i dati negli oggetti e associare i controlli agli oggetti
In Esplora soluzioni espandere il nodo MainPage.xaml, quindi fare doppio clic sul file di codice MainPage.xaml.
Nel file di codice (MainPage.xaml.vb o MainPage.xaml.cs) aggiungere il metodo seguente alla classe MainPage:
' Create sample data. Private Function GetCustomers() As Customers Dim customers As New Customers ' Create 3 sample customers, ' each with 3 sample orders. Dim cust1 As New Customer("1", "A Bike Store", "Seattle") Dim cust1Orders As New Orders cust1Orders.Add(New Order(1, cust1.CustomerID)) cust1Orders.Add(New Order(2, cust1.CustomerID)) cust1Orders.Add(New Order(3, cust1.CustomerID)) cust1.Orders = cust1Orders Dim cust2 As New Customer("2", "Progressive Sports", "Renton") Dim cust2Orders As New Orders cust2Orders.Add(New Order(4, cust2.CustomerID)) cust2Orders.Add(New Order(5, cust2.CustomerID)) cust2Orders.Add(New Order(6, cust2.CustomerID)) cust2.Orders = cust2Orders Dim cust3 As New Customer("3", "Advanced Bike Components", "Irving") Dim cust3Orders As New Orders cust3Orders.Add(New Order(7, cust3.CustomerID)) cust3Orders.Add(New Order(8, cust3.CustomerID)) cust3Orders.Add(New Order(9, cust3.CustomerID)) cust3.Orders = cust3Orders ' Add the sample customer objects to the ' Customers collection. customers.Add(cust1) customers.Add(cust2) customers.Add(cust3) Return customers End Function
// Create sample data. private Customers GetCustomers() { Customers customers = new Customers(); // Create 3 sample customers, // each with 3 sample orders. Customer cust1 = new Customer("1", "A Bike Store", "Seattle"); Orders cust1Orders = new Orders(); cust1Orders.Add(new Order(1, cust1.CustomerID)); cust1Orders.Add(new Order(2, cust1.CustomerID)); cust1Orders.Add(new Order(3, cust1.CustomerID)); cust1.Orders = cust1Orders; Customer cust2 = new Customer("2", "Progressive Sports", "Renton"); Orders cust2Orders = new Orders(); cust2Orders.Add(new Order(4, cust2.CustomerID)); cust2Orders.Add(new Order(5, cust2.CustomerID)); cust2Orders.Add(new Order(6, cust2.CustomerID)); cust2.Orders = cust2Orders; Customer cust3 = new Customer("3", "Advanced Bike Components", "Irving"); Orders cust3Orders = new Orders(); cust3Orders.Add(new Order(7, cust3.CustomerID)); cust3Orders.Add(new Order(8, cust3.CustomerID)); cust3Orders.Add(new Order(9, cust3.CustomerID)); cust3.Orders = cust3Orders; // Add the sample customer objects to the // Customers collection. customers.Add(cust1); customers.Add(cust2); customers.Add(cust3); return customers; }
Sostituire il codice commentato all'interno del gestore eventi UserControl_Loaded con il codice seguente:
Private Sub UserControl_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded 'Do not load your data at design time. If Not (System.ComponentModel.DesignerProperties.GetIsInDesignMode(Me)) Then 'Load your data here and assign the result to the CollectionViewSource. Dim myCollectionViewSource As System.Windows.Data.CollectionViewSource = CType(Me.Resources("CustomersViewSource"), System.Windows.Data.CollectionViewSource) myCollectionViewSource.Source = GetCustomers() End If End Sub
private void UserControl_Loaded(object sender, RoutedEventArgs e) { // Do not load your data at design time. if (!System.ComponentModel.DesignerProperties.GetIsInDesignMode(this)) { //Load your data here and assign the result to the CollectionViewSource. System.Windows.Data.CollectionViewSource myCollectionViewSource = (System.Windows.Data.CollectionViewSource)this.Resources["customersViewSource"]; myCollectionViewSource.Source = GetCustomers(); } }
Verifica dell'applicazione
Compilare ed eseguire l'applicazione per verificare che sia possibile visualizzare i record clienti.
Per eseguire il test dell'applicazione
Scegliere Compila soluzione dal menu Compila. Verificare che la soluzione venga compilata senza errori.
Eseguire l'applicazione.
Verificare che i 3 clienti vengano visualizzati nella griglia dati e che i rispettivi ordini vengano visualizzati nella griglia degli ordini.
Selezionare un cliente diverso e verificare che gli ordini vengano aggiornati in modo che siano visualizzati solo gli ordini del cliente selezionato.
Chiudere l'applicazione.
Passaggi successivi
Dopo avere completato questa procedura dettagliata, è possibile eseguire le attività correlate seguenti:
- Imparare a salvare le modifiche nell'archivio dati. Per ulteriori informazioni, vedere Associazione dati (la pagina potrebbe essere in inglese).