Привязка свойств к элементам управления типа ListBox и DataGrid

46

Если перетащить отдельное свойство из панели Data на монтажный стол, на нем появится новый элемент управления типа ListBox, при условии, что это делается в режиме отображения списком, устанавливаемом на панели Data по умолчанию. Допустим, требуется определить три элемента управления типа ListBox, которые должны содержать значения свойств каждого объекта типа PurchaseOrder из коллекции PurchaseOrders (рассмотренной в предыдущей статье).

Для этого выберите свойство Amount на панели Data и перетащите его на монтажный стол текущего окна типа Window. В итоге на монтажном столе появится один автоматически сформированный элемент управления типа ListBox. В качестве примера на рисунке показан вид монтажного стала после переноса на него свойств Amount, Description и TotalCost:

Три элемента управления типа ListBox, привязанные к свойствам специальных объектов

Ранее было наглядно продемонстрировано, что, если перетащить отдельное свойство или всю коллекцию объектов из панели Data на монтажный стол, соответствующие данные появятся в привязываемых к ним по умолчанию элементах управления типа ListBox. Разумеется, эти данные можно привязать на панели Data и к другим элементам пользовательского интерфейса, при условии, что они предварительно введены на монтажном столе.

В качестве примера найдите элемент управления типа DataGrid в библиотеке ресурсов и перетащите его на монтажный стол текущего окна типа Window, расположив его чуть ниже уже находящихся там элементов управления типа ListBox. Затем выберите узел PurchaseOrders на панели Data вместо отдельных свойств, находящихся ниже этого узла, и перетащите его на новый элемент управления типа DataGrid. В итоге содержимое всей коллекции объектов автоматически отобразится в табличном виде:

Привязка коллекции к DataGrid

Напомним, что рассматриваемая здесь специальная коллекция объектов типа PurchaseOrders является расширением класса ObservableCollection. Поэтому она обладает особой способностью обновлять привязки данных к пользовательскому интерфейсу при изменении содержимого коллекции (добавлении, удалении или обновлении ее элементов). В завершение рассматриваемого здесь примера проекта добавьте элемент управления типа Button на монтажном столе текущего окна типа Window и организуйте обработку события Click.

Напомним, что когда был определен источник данных объекта, в главное окно типа Window был автоматически добавлен ресурс объекта PurchaseOrdersDataSource увязываемый с экземпляром коллекции типа PurchaseOrders. При запуске приложения на выполнение объект этой коллекции создается с помощью используемого по умолчанию конструктора.

Поэтому, если требуется получить доступ к экземпляру объекта того же самого класса, придется искать нужный элемент по ключевому имени в контейнере ресурсов. В качестве примера ниже приведен исходный код обработчика событий типа Click, в котором новый объект типа PurchaseOrder добавляется в коллекцию:

private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
		{
			// Получить нужный ресурс объекта
			PurschaseOrders myOrders = (PurschaseOrders)this.Resources["PurchaseOrdersDataSource"];
			
			// Случайные значения
			Random r = new Random();
			int amount = r.Next(50);
			double cost = r.NextDouble();
			
			myOrders.Add(new PurschaseOrder(amount, cost, "TEST!"));
		}

В этом обработчике событий генерируется ряд случайных данных для проверки количества и стоимости заказанного товара, но вы вольны расширить рассматриваемый здесь проект рядом новых элементов управления вводом текста для сбора особых данных. Так или иначе, если вы запустите свое приложение на выполнение и щелкнете несколько раз на кнопке, представленной элементом управления типа Button то заметите, как автоматически обновляются таблица и списки, представленные элементами управления типа DataGrid и ListBox соответственно.

Пройди тесты
Лучший чат для C# программистов