Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Привязка к объектам CLR

Читайте также:
  1. График 5.1 – Привязки технопарков к инфраструктурным объектам
  2. ЗАДАНИЕ N 24 Между объектами мегамира преобладает __________ взаимодействие.
  3. Использование буфера обмена для работы с объектами
  4. Команды и привязка к данным
  5. Контакты с живыми объектами
  6. Плата за пользование водными объектами (водный налог)
  7. Плательщики сборов за пользование объектами животного мира и за пользование объектами водных биологических ресурсов

Данные привязываются к объектам CLR с помощью свойств и списков (списком считается любой тип, реализующий интерфейс IEnumerable). Связывание устанавливает связь между источником и получателем.

Идентификатор имени свойства для связывания с объектом может записываться в двух видах: для простых свойств CLR и для зависимых свойств, производных от класса DependencyProperty. Чтобы понять, в чем разница, начнем с простого примера:

<Window
xmlns=’http://schemas.microsoft.com/winfx/2006/xaml/presentation’
xmlns:x=’http://schemas.microsoft.com/winfx/2006/xaml’>
<StackPanel>
<TextBox Name=’text1’>Hello</TextBox>
<TextBox Text=’ {Binding ElementName=text1, Path=Text} ’ />
</StackPanel>
</Window>

Здесь свойство Text объекта TextBox связывается со свойством Text другого объекта. С очень похожим примером мы уже встречались выше. Поскольку Text –зависимое свойство, то этот пример в точности эквивалентен такому:

<Window
xmlns=’http://schemas.microsoft.com/winfx/2006/xaml/presentation’
xmlns:x=’http://schemas.microsoft.com/winfx/2006/xaml’>
<StackPanel>
<TextBox Name=’text1’>Hello</TextBox>
<TextBox Text=’ {Binding ElementName=text1, Path=(TextBox.Text)} ’ />
</StackPanel>
</Window>

Во втором случае мы воспользовались формой идентификатора свойства, «классифицированной классом». Результат в обоих случаях одинаков, но во втором примере удается избежать применения отражения для разрешения имени «Text» в выражении привязки. Эта оптимизация полезна с двух точек зрения: во-первых, чтобы избежать накладных расходов на отражение, а, во-вторых, чтобы обеспечить привязку к присоединенным свойствам. Например, если бы мы захотели привязать объект TextBox к свойству Grid.Row, то могли бы написать,

<SomeControl SomeProperty=’{Binding ElementName=text1, Path=(Grid.Row)}’ />.

Чтобы лучше понять, как работают пути к свойствам, мы можем взять чуть более сложный объект. Определим класс Person, в котором есть составные свойства Address и Name. В совокупности три класса – Person, Name и Address – образуют небольшую объектную модель, на которой можно продемонстрировать некоторые интересные задачи, возникающие в связи со связыванием. Для начала организуем простое отображение данных о человеке

<!— Window1.xaml —>
<Window... Title=’Object Binding’>
<StackPanel>
<ContentControl Content=’{Binding Path=Name}’ />
<TextBlock Text=’{Binding Path=Addresses[0].AddressName}’ />
<TextBlock Text=’{Binding Path=Addresses[0].Street1}’ />
<TextBlock Text=’{Binding Path=Addresses[0].City}’ />
</StackPanel>
</Window>

// Window1.xaml.cs
public partial class Window1: Window
{
public Window1()
{
InitializeComponent();
DataContext = new Person(
new Name(«Иван», «Иванов»),
new Address(“Интуит”,
“Интуит.ru”,
“Москва”);
}
}

Здесь иллюстрируется привязка к простому свойству (Path=Name) и более сложные пути к свойствам (Path=Addresses[0].AddressName). Квадратные скобки позволяют добраться до отдельных элементов набора. Обратите также внимание, что мы можем составить сколь угодно сложный путь из имен свойств и индексов в списке. Привязка к списку производится точно так же, как к свойству. Путь к свойству должен приводить к объекту, который реализует интерфейс IEnumerable, но в остальном никаких отличий нет. Можно было бы отображать не один адрес, а завести список и привязаться к его свойству ItemsSource (разумеется, тогда мы смогли бы определить шаблон данных для типа адреса):

<ListBox ItemsSource=’{Binding Path=Addresses}’ />

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


Дата добавления: 2015-08-13; просмотров: 75 | Нарушение авторских прав


Читайте в этой же книге: Хронология Silverlight | Повышение полномочий для приложений в браузере | Работа с текстом | Отладка при связывании с данными | Улучшенная поддержка шаблона MVVM | Неявные шаблоны | Другие изменения | Версия Visual Studio 2010 позволяет проектировать приложения, ориентированные на различные версии .NET. Напишите минимально допустимую версию .NET (ответ версии через точку). | Задача 4. | Ресурсы |
<== предыдущая страница | следующая страница ==>
Основные принципы связывания| Редактирование

mybiblioteka.su - 2015-2024 год. (0.006 сек.)