Скачать презентацию WINDOWS PRESENTATION FOUNDATION Потоки управления WPF Dependency Скачать презентацию WINDOWS PRESENTATION FOUNDATION Потоки управления WPF Dependency

MIC-WPF. Лекция 3.pptx

  • Количество слайдов: 15

WINDOWS PRESENTATION FOUNDATION { «Потоки управления WPF» Dependency Object, Dependency Properties, Binding } WINDOWS PRESENTATION FOUNDATION { «Потоки управления WPF» Dependency Object, Dependency Properties, Binding }

DEPENDENCY OBJECT «Самый базовый класс» WPF Функции: отслеживание изменений Dependency Properties; построение графа зависимостей; DEPENDENCY OBJECT «Самый базовый класс» WPF Функции: отслеживание изменений Dependency Properties; построение графа зависимостей; распространение значений Dependency Properties по графу зависимостей (Binding); перехват значений / валидация; рассылка инфраструктурных уведомлений. Обращение к Dependency. Property возможно только из потока, создавшего Dependency. Object!

DISPATCHER Для обеспечения контракта Dependency. Object использует специальный объект Dispatcher – ОБРАБОТЧИК ИНФРАСТРУКТУРНЫХ СООБЩЕНИЙ DISPATCHER Для обеспечения контракта Dependency. Object использует специальный объект Dispatcher – ОБРАБОТЧИК ИНФРАСТРУКТУРНЫХ СООБЩЕНИЙ Ключевая идея: очередь сообщений с приоритетом Делегаты помещаются в очередь и вызываются согласно приоритету и порядку в очереди Вызов делегатов осуществляется: последовательно, в потоке Dispatcher, как синхронно, так и асинхронно Поток Dispatcher – поток, в котором он был создан

DISPATCHER UI отрисовывается в отдельном потоке (STAThread) Dispatcher потока UI создаётся на этапе инициализации DISPATCHER UI отрисовывается в отдельном потоке (STAThread) Dispatcher потока UI создаётся на этапе инициализации системы WPF Весь пользовательский ввод (мышь, клавиатура и т. п. ) попадает в Dispatcher потока UI с наивысшим приоритетом При создании Dependency. Object WPF автоматически связывает его с диспетчером текущего потока С помощью Dispatcher можно передать выполнение метода в другой поток как синхронно, так и асинхронно

ПРИОРИТЕТЫ DISPATCHER Классы приоритетов: Foreground (инфраструктурные сообщения, непосредственный пользовательский ввод), Background (обработка данных, вычислительные ПРИОРИТЕТЫ DISPATCHER Классы приоритетов: Foreground (инфраструктурные сообщения, непосредственный пользовательский ввод), Background (обработка данных, вычислительные процессы), Idle (низкоприоритетные операции) Inactive

ПРИОРИТЕТЫ DISPATCHER Класс FOREGROUND: Send = 10 – сообщения Windows (в т. ч. пользовательский ПРИОРИТЕТЫ DISPATCHER Класс FOREGROUND: Send = 10 – сообщения Windows (в т. ч. пользовательский ввод) Normal = 9 – значение по умолчанию Data. Bind = 8 – связывание данные и сопутствующие процессы Render = 7 – отрисовка Loaded = 6 – сразу после отрисовки (событие Loaded) Класс BACKGROUND: Input = 5 – выполняется только после пользовательского ввода Background = 4 – последний из «активных» приоритетов Класс IDLE: Context. Idle = 3 Application. Idle = 2 System. Idle = 1

DEPENDENCY PROPERTIES Dependency. Property – специальный тип объектов, используемых в качестве ключей ассоциативного массива DEPENDENCY PROPERTIES Dependency. Property – специальный тип объектов, используемых в качестве ключей ассоциативного массива значений свойств объекта Dependency. Object Dependency. Property определяется для типа, но используется в экземпляре Экземпляры Dependency. Property определяются как статические readonly свойства Статическое свойство, использующее Dependency. Property, определить нельзя!

DEPENDENCY PROPERTIES Функции Dependency. Property: Получение и распространение значений через механизм связывания данных (Binding) DEPENDENCY PROPERTIES Функции Dependency. Property: Получение и распространение значений через механизм связывания данных (Binding) Автоматическое отслеживание изменений свойств Dependency. Object Единый механизм проверки и перехвата изменения значений свойств Dependency. Object

DEPENDENCY PROPERTIES ДЕМО DEPENDENCY PROPERTIES ДЕМО

PROPERTY METADATA При регистрации Dependency. Property можно задавать метаданные (Property. Metadata), которые могут: Контролировать PROPERTY METADATA При регистрации Dependency. Property можно задавать метаданные (Property. Metadata), которые могут: Контролировать и оповещать об изменениях значений свойства Определять влияние свойства на объект и его окружение Наделять свойство общей для всех экземпляров класса логикой После регистрации Dependency. Property метаданные изменить нельзя!

PROPERTY METADATA Базовый класс Property. Metadata позволяет задать: Дефолтное значение свойства Метод корректировки нового PROPERTY METADATA Базовый класс Property. Metadata позволяет задать: Дефолтное значение свойства Метод корректировки нового значения (Coerce. Value. Callback) Метод перехвата изменения значения (Property. Changed. Callback)

PROPERTY METADATA Наследники Property. Metadata могут определять свою дополнительную логику: UIProperty. Metadata позволяет задавать PROPERTY METADATA Наследники Property. Metadata могут определять свою дополнительную логику: UIProperty. Metadata позволяет задавать параметры анимации Framework. Property. Metadata отвечает за метаданные, имеющие смысл в контексте дерева элементов WPF: Нужно ли перерисовать объект при изменении свойства Влияет ли свойство на размеры объекта и его положение, на размеры и положение родителя Является ли значение свойства наследуемым Поддерживает ли свойство связывание данных Является ли двустороннее связывание способом связывания данного свойства с другими по умолчанию

ATTACHED PROPERTY XAML позволяет в одном элементе указывать значение для свойства, определенного в другом: ATTACHED PROPERTY XAML позволяет в одном элементе указывать значение для свойства, определенного в другом:

ДОМАШНЕЕ ИССЛЕДОВАНИЕ Сколько экземпляров Dependency. Property может существовать в одном WPF-приложении? Какую роль выполняет ДОМАШНЕЕ ИССЛЕДОВАНИЕ Сколько экземпляров Dependency. Property может существовать в одном WPF-приложении? Какую роль выполняет Dependency. Property. Unset. Value? Найдите примеры создания Attached. Property, которое можно устанавливать в любом месте дерева.

Следующее занятие состоится 23. 11. 2012! Следующее занятие состоится 23. 11. 2012!