Опубликован: 08.07.2011 | Уровень: для всех | Доступ: платный
Лекция 2:

Основы технологии WPF

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >

Шаблоны данных

Шаблон данных – это часть XAML-разметки, которая определяет, как должен отображаться привязанный объект данных. Шаблон данных может включать любую комбинацию элементов и должен содержать одно или более выражение привязки.

Шаблоны данных поддерживают следующие элементы управления;

  • элементы управления содержимым через свойство ContentTemplate, которое применяется для визуализации любого содержимого помещенного в Content ;
  • списковые элементы управления через свойство ItemTemplate, для визуализации элементов из коллекции, указанной в качестве источника данных.

Для примера разработаем шаблон данных для списка ListBox. В списке должны отображаться данные по сотруднику: фамилия, имя и отчество. Источником данных для списка listBoxEmployees является коллекция Employees, которая содержит классы Employee. Свойствами класса Employee являются:

  • Surname – фамилия;
  • Name - имя;
  • Patronymic – отчество.

Шаблон данных для списка listBoxEmployees имеет следующий вид.

<ListBox Name="listBoxEmployees" >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=Surname}" />
                <TextBlock Text="{Binding Path=Name}" />
                <TextBlock Text="{Binding Path=Patronymic}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

При запуске программы в окне выводится список, приведенный на рис. 2.9.

Представление списка с пользовательским шаблоном данных

Рис. 2.9. Представление списка с пользовательским шаблоном данных

Для многократного использования шаблона данных его можно задать в виде ресурса окна или приложения, указав ключ шаблона ( ListBoxEmployee ).

<Application.Resources>
	<DataTemplate x:Key="ListBoxEmployee" >
	... 
	</DataTemplate>
</Application.Resources>

При этом в XAML-описании списка для свойства ItemTemplate задается расширение разметки на статический ресурс.

<ListBox Grid.Row="1" Name="listBoxEmployees" 
	ItemTemplate="{StaticResource ListBoxEmployee}" />

Шаблоны данных являются эффективным инструментом для изменения визуального представления элементов управления.

Ключевые термины

Архитектура WPF, контейнер компоновки, панель, элемент управления содержимым, свойства шрифтов, ресурс, стиль, шаблон.

Windows Presentation Foundation, WPF, DependencyObject, Visual, FrameworkElement, UIElement, Shape, Control, Content Control, ItemsControl, Panel, Grid, UniformGrid, StackPanel, WrapPanel, DockPanel, FrameButton, CheckBox, RadioButton, TextBlock, TextBox, RichTextBox, ListBox, ComboBox, ScrollBar, ProgressBar, Slider, Command, Resources, StaticResource, DynamicResource, ResourceDictionary, MergedDictionaries, Style, Setter, EventSetters, Trigger, EventTrigger, ControlTemplate, DataTemplate.

Краткие итоги

Архитектура WPF включает уровни API интерфейса, медиа-интеграции и визуализации. Каждый уровень имеет пространства имен, в которых сформированы иерархии классов WPF.

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

Модель команд является эффективным инструментом для реализации задач приложения.

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

Ресурсы, стили и шаблоны используются при создании WPF-приложение для повышения эффективности интерфейса пользователя.

Ресурсы для углубленного изучения

  1. Основы WPF // http://msdn.microsoft.com/ru-ru/library/ms746927.aspx
  2. Элементы управления // http://msdn.microsoft.com/ru-ru/library/ms752069.aspx.
  3. Ресурсы WPF // http://msdn.microsoft.com/ru-ru/library/ms742538.aspx.
  4. Стили и шаблоны. Общие сведения // http://msdn.microsoft.com/ru-ru/library/bb613570.aspx.
  5. [ 4 ] , стр. 82– 174, 220 – 410, 589 – 636.
  6. [ 6 ] , стр. 1113– 1170.
  7. [ 8 ] , стр. 544– 564.
  8. [ 9 ] , стр. 995– 1066, 1137 - 1212.

Вопросы для самопроверки

  1. Какие основные компоненты составляют архитектуру WPF?
  2. Приведите ключевые иерархии фундаментальных классов WPF.
  3. Как осуществляется компоновка элементов управления в WPF?
  4. Назовите основные контейнеры компоновки в WPF.
  5. Поясните назначение и возможности класса Grid.
  6. Поясните назначение и возможности класса StackPanel.
  7. Для чего предназначены элементы управления содержимым. Приведите примеры элементов управления содержимым.
  8. Поясните назначение класса ContentControl.
  9. Какие текстовые элементы управления имеются в WPF? Поясните их назначение.
  10. Какие текстовые элементы управления списками имеются в WPF? Поясните их назначение.
  11. Какие специализированные элементы управления имеются в WPF? Поясните их назначение.
  12. Поясните назначение командной модели WPF. Приведите пример использования команд.
  13. Для чего предназначены ресурсы в WPF и как они определяются и используются?
  14. Для чего предназначены стили в WPF и как они определяются и используются?
  15. Для чего предназначены шаблоны в WPF и как они определяются и используются?
  16. Поясните назначение и приведите примеры шаблонов элементов управления.
  17. Поясните назначение и приведите примеры шаблонов данных.
< Лекция 1 || Лекция 2: 123456 || Лекция 3 >
Александр Петров
Александр Петров

При загрузке данных из БД возникает исключение InvalidOperationException с сообщением: Элемент коллекции должен быть пустым перед использованием ItemsSource. Знаю, что для заполнения DataGrid можно использовать коллекции Items или ItemsSource, но одновременно их использовать нельзя: если задано значение для свойства ItemsSource и в коде C# добавляется элемент в Items, возникает исключение. 
Вопрос, как отследить и отключить добавление элемента в Items?

Максим Спиридонов
Максим Спиридонов

В пятой лекции на второй странице в компиляторе выскакивает ошибка в строчке :

ObjectQuery<Employee> employees = DataEntitiesEmployee.Employees;

Ошибка CS0029

Не удается неявно преобразовать тип "System.Data.Entity.DbSet<WpfApplProject.Employee>" в "System.Data.Entity.Core.Objects.ObjectQuery<WpfApplProject.Employee>".

в using прописал все как положено, здесь похоже именно с преобразованием типов проблемы

Igor Chelyadinski
Igor Chelyadinski
Беларусь, Минск, №54, 2013
Валентина Алешина
Валентина Алешина
Россия