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

Основные принципы связывания

Читайте также:
  1. I. ИСТОРИЯ ВОПРОСА. ОСНОВНЫЕ ПОНЯТИЯ.
  2. I. Основные направления деятельности
  3. I. основные положения
  4. I. Основные положения
  5. I. Основные экономические процессы на предприятии.
  6. I. Специфика обществознания и основные этапы его развития.
  7. I.5. Принципы отбора материала и организации учебного материала.

Связывание – это просто способ синхронизации двух элементов данных. Элемент данных (data point) – абстрактное понятие, выражающее идею «точки» в пространстве данных. Описать элемент данных можно разными способами; чаще всего он представляется источником данных и запросом. Например, элемент данных «свойство» состоит из объекта и имени свойства. Имя свойства определяет само свойство, а объект служит источником данных для этого свойства.

В WPF элемент данных представлен классом Binding. Для конструирования привязки мы указываем источник (данных) и путь (запрос). В следующем примере создается элемент данных, ссылающийся на свойство Text объекта TextBox:

Binding bind = new Binding();
bind.Source = textBox1;
bind.Path = new PropertyPath(“Text”);

Нужен еще второй элемент данных, который будет синхронизован с первым. Поскольку связывание в WPF ограничивается только деревом элементов, то для определения какого-либо элемента данных нужно вызвать метод SetBinding. Этот метод вызывается для источника данных, а данные привязываются к запросу (в данном примере к свойству ContentControl.ContentProperty):

contentControl1.SetBinding(ContentControl.Content, bind);

В этом примере свойство Text объекта textBox1 связывается со свойством Content объекта contentControl1. То же самое можно было бы выразить на XAML

<Window... Title=’ExampleBind’>
<StackPanel>
<TextBox x:Name=’textBox1’ />
<ContentControl
Margin=’5’ x:Name=’contentControl1’
Content=’{ Binding ElementName=textBox1,Path=Text }’ />
</StackPanel>
</Window>

Когда привязка объявляется в разметке, для задания источника можно использовать свойство ElementName.

Как мы только что увидели, механизм связывания можно применить для привязки свойства Text (строкового) элемента TextBox к свойству Content (имеющему тип object). Так же можно привязать свойство Text к свойству FontFamily:

<Window... Title=’ExampleBind2’ >
<StackPanel>
<TextBox x:Name=’textBox1’ />
<TextBox x:Name=’textBox2’ />
<ContentControl
Margin=’5’
Content=’{Binding ElementName=textBox1,Path=Text}’
FontFamily=’{Binding ElementName=textBox2,Path=Text}’ />
</StackPanel>
</Window>

Существует два механизма преобразования: класс TypeConverter, существующий в.NET, начиная с версии 1.0, и новый интерфейс IValueConverter. В нашем случае с классом FontFamily ассоциирован конвертер типов TypeConverter, поэтому преобразование выполняется автоматически.

Чтобы выполнить нужное преобразование, можно воспользоваться конвертерами значений, ассоциированными с привязкой. Для этого берется источник (строка из свойства Text) и преобразуется в какой-то объект, который понимает получатель (свойство Content).

Начнем с создания простого типа:

public class Human
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
}

Тип мог бы быть любым: встроенным, библиотечным, разработанным вами. Идея в том, что мы хотим преобразовать свойство Text в объект конкретного типа. Для этого произведем конвертер от интерфейса IValueConverter и реализуем два метода:

public class HumanConverter: IValueConverter
{
public object Convert(
object value, Type targetType, object parameter, CultureInfo culture)
{
Human h = new Human();
h.Name = (string)value;
return h;
}
public object ConvertBack(
object value, Type targetType, object parameter, CultureInfo culture)
{
return ((Human)value).Name;
}
}

В более сложных случаях реализовать преобразование в обе стороны может оказаться невозможно. Последний шаг при использовании конвертера – ассоциировать его с привязкой:

<ContentControl
Margin=’5’
FontFamily=’{Binding ElementName=textBox2,Path=Text}’>
<ContentControl.Content>
<Binding ElementName=’textBox1’ Path=’Text’>
<Binding.Converter>
<l:HumanConverter xmlns:l=’clr_namespace:ExampleBind’/>
</Binding.Converter>
</Binding>
</ContentControl.Content>
</ContentControl>

Элементы данных и преобразования – две базовые конструкции механизма связывания. Познакомившись с основными ингредиентами данных, мы можем заняться деталями привязки к объектам CLR.


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


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

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