Пошаговое руководство. Привязка элементов управления Silverlight к объектам

В этом пошаговом руководстве описывается создание приложения Silverlight, которое содержит связанные с данными элементы управления.Элементы управления привязаны к 2 связанным бизнес-объектам, которые были определены пользователями.

В данном пошаговом руководстве рассмотрены следующие задачи:

  • Создание приложения Silverlight.

  • Создание 2 связанных пользовательских объектов для привязки к пользовательскому интерфейсу.

  • Выполнение мастера настройки источника данных для подключения к пользовательскому объекту, который заполняет окно Источники данных.

  • Создание набора элементов управления с привязкой к данным путем перетаскивания элементов из окна Источники данных в Конструктор Silverlight.

    ПримечаниеПримечание

    На вашем компьютере названия некоторых элементов интерфейса пользователя Visual Studio или их расположение могут отличаться от указанных в нижеследующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Параметры Visual Studio.

Обязательные компоненты

Ниже приведены компоненты, необходимые для выполнения данного пошагового руководства.

  • Visual Studio

Предварительное ознакомление со следующими понятиями полезно, но не обязательно для выполнения пошагового руководства:

  • Работа с Конструктор Silverlight.Дополнительные сведения см. на странице Silverlight.

  • Привязка данных Silverlight.Дополнительные сведения см. в разделе Привязка данных.

  • Работа с библиотеками XAML.Дополнительные сведения см. в разделе XAML.

Создание приложения Silverlight

Начните выполнение этого пошагового руководства с создания приложения Silverlight.

Чтобы создать проект Silverlight

  1. В меню Файл создайте новый проект.

  2. В узле Visual C# или Visual Basic последовательно щелкните Silverlight и Приложение Silverlight.

  3. В поле Имя введите SilverlightObjectBinding и нажмите кнопку ОК.

  4. Не изменяйте параметры по умолчанию в диалоговом окне Создать приложение Silverlight и нажмите кнопку ОК.

    Приложение Silverlight будет создано как решение с двумя проектами: проект SilverlightObjectBinding и проект SilverlightObjectBinding.Web, который используется для размещения проекта SilverlightObjectBinding.

Создание пользовательских объектов для привязки

Чтобы предоставить данные для приложения, необходимо определить модель данных.В этом пошаговом руководстве будут созданы пользовательские объекты, представляющие клиентов и заказы в модели данных.

Чтобы создать объекты Customer

  1. В обозревателе решений щелкните правой кнопкой мыши проект SilverlightObjectBinding, щелкните "Добавить", затем — Новый элемент.

  2. В диалоговом окне Добавление нового элемента выберите элемент Класс.

  3. Измените имя на Customer и нажмите кнопку Добавить.

  4. В файле кода Customer замените класс Customer на следующий код.

    ''' <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>
    {
    
    }
    

Чтобы создать объекты Orders

  1. В обозревателе решений щелкните правой кнопкой мыши проект SilverlightObjectBinding, щелкните Добавить, затем — Новый элемент.

  2. В диалоговом окне Добавление нового элемента выберите элемент Класс.

  3. Измените имя на Order и нажмите кнопку Добавить.

  4. В файле кода Order замените класс Order на следующий код.

    ''' <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>
    {
    
    }
    
  5. Выполните построение проекта.

Создание источника данных объекта

Создайте источник данных объектов и заполните окно Источники данных, запустив мастер настройки источника данных.

Чтобы создать источник данных объекта

  1. В меню Данные выберите пункт Показать источники данных.

  2. В окне Источники данных выберите Добавить новый источник данных.

    Запустится Мастер настройки источника данных.

  3. На странице Выбор типа источника данных выберите Объект и нажмите кнопку Далее.

  4. На странице Выбор объектов данных дважды разверните представление в виде дерева и установите флажок рядом с пунктом Customers.

    ПримечаниеПримечание

    Убедитесь, что выбран пункт Customers, а не пункт Customer.Если объект Customers недоступен, закройте мастер и повторно постройте решение.

  5. Нажмите кнопку Готово.

    Окно Источники данных будет заполнено на основе источника данных объектов.

Создание элементов управления с привязкой к данным

Создайте элементы управления, которые отображают данные в объектах посредством перетаскивания узлов Customers и Orders из окна Источники данных в конструктор.

Чтобы создать элементы управления с привязкой к данным, выполните следующие действия

  1. Откройте в представлении конструктора MainPage.xaml.

  2. Из окна Источники данных перетащите узел Customers в конструктор.

  3. Из окнаИсточники данных перетащите узел Orders в конструктор под сетку клиентов.

Заполнение объектов данными и привязка их к созданному объекту CollectionViewSource

Так как в этом пошаговом руководстве в качестве модели данных используются пользовательские объекты, образцовые данные создаются и загружаются при открытии страницы Silverlight.

После перетаскивания источника данных объектов из окна Источники данных создается комментарий к коду, который способствует настройке привязки источника данных к пользовательскому объекту.Удалите созданный комментарий к коду и привяжите источник данных System.Windows.Data.CollectionViewSource.Source (myCollectionViewSource) к коллекции объектов данных.В следующей процедуре показано, как изменить созданный код для его привязки к созданным элементам управления.

Каждый раз при перетаскивании элементов из окна Источники данных в конструктор на странице Silverlight создается объект System.Windows.Data.CollectionViewSource.Его имя основано на используемом источнике данных.Замените комментарий 'Resource Key for CollectionViewSource' на CustomersViewSource или customerViewSource в зависимости от используемого языка программирования.

Чтобы заполнить объекты дынными и привязать элементы управления к объектам

  1. В обозревателе решений разверните узел MainPage.xaml и дважды щелкните файл кода MainPage.xaml.

  2. В фале кода (MainPage.xaml.vb или MainPage.xaml.cs) добавьте следующий метод в класс 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;
    }
    
  3. Замените закомментированный код в обработчике событий UserControl_Loaded следующим кодом:

    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();
        }
    }
    

Тестирование приложения

Постройте и запустите приложение, чтобы проверить, имеется ли возможность просматривать записи о клиентах.

Тестирование приложения

  1. В меню Построение выберите команду Построить решение.Убедитесь в том, что проект строится без ошибок.

  2. Запустите приложение.

  3. Убедитесь, что 3 клиента появились в сетке данных, а в сетке заказов отображаются заказы выбранных клиентов.

  4. Выберите другого клиента и убедитесь, что обновленные заказы содержат только заказы выбранного клиента.

  5. Закройте приложение.

Следующие действия

После прохождения этого пошагового руководства можно выполнить следующие действия:

  • Узнайте, как сохранить изменения в хранилище данных.Дополнительные сведения см. в разделе Привязка данных.

См. также

Другие ресурсы

Доступ к данным в Visual Studio

доступ к данным и структуры данных