Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемyu-shatalov.narod.ru
1 Dependency Property Расширение разметки (Markup Extensions) Привязки (binding) Лекция 13
2 Свойства зависимости (Dependency Property) Расширение разметки (Markup Extensions) Привязка элементов Привязка данных Преобразование данных Конвертеры StringFormat Множественная привязка MultiBinding MultiValueCanverter StringFormat
3 Расширение обычных свойств Для Dependency Property важен не только и не столько очередность установки свойства, а способ установки Dependency Property фактически помнит значения, установленные каждым из способов, а WPF использует самое приоритетное значение. При очистке приоритетного значения WPF использует следующее по приоритету менее приоритетное значение Порядок и приоритет определения значения свойства зависимости : Установлено системой коррекции Установлено анимацией Установлено напрямую в XAML, коде или с помощью Binding Установлено с помощью TemplateParent ( триггер имеет приоритет перед простой установкой ) Установлено триггерами стиля Установлено триггерами шаблона Установлено в стиле Установлено в стиле по умолчанию ( темы ) Свойство унаследовано в визуальном дереве Значение по умолчанию ПриоритетПриоритетПриоритетПриоритет
4 Объявление и регистрация свойства public static readonly DependencyProperty MyProperty DependencyProperty.Register int public static readonly DependencyProperty MyProperty = DependencyProperty.Register("My", typeof(int), typeof(MainWindow), new FrameworkPropertyMetadata(20)); Создание обертки – обычного свойства.NET int My public int My { GetValueMyProperty get { return (int)GetValue(MyProperty); } SetValueMyProperty set { SetValue(MyProperty, value); } } Нельзя использовать в обертке свойства зависимости какую - либо дополнительную логику, поскольку WPF вызывает GetValue и SetValue напрямую, а при использовании в коде в основном вызываются обертки свойства, а не GetValue / SetValue. По соглашению свойство зависимости имеет суффикс Property, а свойство обертка – без нет PropertyMetadata ( наследники UIPropertyMetadata, FrameworkPropertyMetadata) задает : Значение по умолчанию Опции использования свойства зависимости ( например, возможность использования в анимации, наследование, использование двустороннего binding по умолчанию, влияние на отрисовку и процесс измерения элемента и т. д.) Методы отвечающие за корректировку значений свойства
5 Dependency Property
6 Свойства зависимости (Dependency Property) Расширение разметки (Markup Extensions) Привязка элементов Привязка данных Преобразование данных Конвертеры StringFormat Множественная привязка MultiBinding MultiValueCanverter StringFormat
7 Позволяет получить значение в зависимости от переданных параметров Определение Создать класс наследник от MarkupExtension Переопределить метод ProvideValue Пометить класс атрибутом [MarkupExtensionReturnType()] с указанием возвращаемого типа MarkupExtensionReturnType [MarkupExtensionReturnType(typeof(string))] MarkupExtension class MyExtension : MarkupExtension { public int MyProperty { get; set; } ProvideValue public override object ProvideValue(IServiceProvider serviceProvider) { return (MyProperty + 3).ToString(); } Использование ( по соглашению Extension можно опустить )
8 MarkupExtension
9 Свойства зависимости (Dependency Property) Расширение разметки (Markup Extensions) Привязка элементов Привязка данных Преобразование данных Конвертеры StringFormat Множественная привязка MultiBinding MultiValueCanverter StringFormat
10 Привязка данных (binding) – это отношение, которое сообщает WPF о необходимости извлечения некоторой информации из исходного объекта и использования его для установки свойства в целевом объекте. Целевое свойство – обязательно свойство зависимости Объект источник – абсолютно любой объект Поддерживает автоматическое обновление свойств при изменении объектов ( при наличии уведомления об изменении ) *
11 Объект Binding в XAML устанавливается для целевого свойства ElementName ElementName – задает имя элемента - источника Path Path – задает путь к свойству в объекте - источнике sliderValue Binding sliderValue WPF автоматически получает уведомления об изменении свойства источника и изменяет целевое свойство.
12 Привязка к элементу
13 Mode Задается свойством Mode OneWay OneWay – целевое свойство обновляется при изменении исходного свойства TwoWay TwoWay - целевое свойство обновляется при изменении исходного свойства, а исходное свойство обновляется при изменении целевого свойства OneTime OneTime – целевое свойство устанавливается один раз на основе начального значения исходного свойства. Далее целевое свойство не ихменяется OneWayToSource OneWayToSource – обратно OneWay. Исходное свойство обновляется при изменении целевого свойства. Целевое свойство никогда не изменяется. Default Default – OneWay или TwoWay, устанавливается при определении самого свойства. *
14 Направление привязки
15 UpdateSourceTrigger Задается свойством UpdateSourceTrigger PropertyChanged PropertyChanged – источник обновляется немедленно, когда изменяется целевое свойство LostFocus LostFocus – источник обновляется немедленно, когда элемент теряет фокус и целевое свойство изменилось Explicit Explicit – источник не обновится пока не будет вызван метод BindingExpression.UpdateSource(); BindingExpression be = slider.GetBindingExpression(Slider.ValueProperty); be.UpdateSource(); Default Default – поведение определено при задании свойства. Почти всегда это PropertyChanged, но для TextBox.Text – LostFocus.
16 Binding binding = new Binding(); binding.Source = slider; binding.Path = new PropertyPath("Value"); binding.Mode = BindingMode.TwoWay; textBlock.SetBinding( TextBlock.FontSizeProperty, binding);
17 Свойства зависимости (Dependency Property) Расширение разметки (Markup Extensions) Привязка элементов Привязка данных Преобразование данных Конвертеры StringFormat Множественная привязка MultiBinding MultiValueCanverter StringFormat
18 Выбор источника данных. Свойства Binding ElementName ElementName – имя элемента - источника при привязке к элементу WPF Source Source – имя объекта при привязке не к элементу WPF RelativeSource RelativeSource – задает источник связывания, относительно текущего элемента в визуальном дереве. DataContext DataContext – если источник объекта для Binding не установлено, по Binding ищет элемент в визуальном дереве, у которого установлено свойство DataContext и считает источником значение свойства DataContext Path Path – путь к свойству в объекте - источнике. Может быть не задан, тогда привязка осуществляется к самому объекту
19 Значения RelativeSource Self Self – ссылка на сам элемент FindAncestor AncestorType FindAncestor – поиск объекта заданного типа выше по визуальному дереву. AncestorType – указывает элемент какого типа ищется PreviousData PreviousData – предыдущий элемент в списке (ItemsControl) TemplatedParent TemplatedParent – используется в шаблоне. Обозначает элемент, к которому применен шаблон
20 Source Relative Source DataContext
21 Привязка к данным – это создание связи между двумя свойствами разных объектов Не обязательно визуальных Характеристики связи Источник и получатель Направление Динамичность ( один раз или постоянно ) Сложность ( один к одному или привязка к коллекции )
22 Для того, чтобы целевое свойство автоматически обновлялось необходимо, чтобы привязанное свойство - источник извещало о своем изменении Извещения об изменении Поддерживается всеми DependencyProperty INotifyPropertyChanged Частный класс должен реализовывать интерфейс INotifyPropertyChanged и вызывать событие PropertyChanget при изменении свойства ICollectionChanged ObservableCollection Коллекции должны реализовывать интерфейс ICollectionChanged. Например, коллекция ObservableCollection
23 Уведомления об изменении
24 Свойства зависимости (Dependency Property) Расширение разметки (Markup Extensions) Привязка элементов Привязка данных Преобразование данных Конвертеры StringFormat Множественная привязка MultiBinding MultiValueCanverter StringFormat
25 Конвертер – класс, преобразующий один тип в другой XAML использует их повсеместно Преобразование строки в объект IValueConverter Реализует IValueConverter Convert ConvertBack Методы Convert и ConvertBack Преобразование от источника к целевому свойству : object Convert(object value, Type targetType, object parameter, CultureInfo Culture) Преобразование от целевого свойства к источнику : object ConvertBack(object value, Type targetType, object parameter, CultureInfo Culture) ValueConversion Конвертер необходимо пометить атрибутом ValueConversion, указывающем типы между которыми происходит преобразование [ValueConversion(typeof(Product), typeof(int))]
26 ConverterParameter – дополнительный параметр. Любой объект ConverterCulture – культура конвертера Нужна для локализации
27 Для использования конвертера необходимо : Указать пространство имен, где находится конвертер Создать в ресурсах экземпляр конвертера ( обычно ) Использовать конвертер в Binding {Binding … Converter={StaticResource myconv} }
28 Конвертер
29 StringFormat Форматирование вывода (StringFormat): Text={Binding … StringFormat= Цена {0} руб } Можно использовать обычные шаблоны форматированного вывода строк Дополнительный параметр должен быть только один. Text={Binding … StringFormat= Цена {0} * {0} руб } Неверно Text={Binding … StringFormat= Цена {2} * {1} руб } Если параметр используется первым, то необходимо добавить пустые скобки {} Text={Binding … StringFormat={}{0} руб } Замена или дополнение конвертеру
30 StringFormat
31 Свойства зависимости (Dependency Property) Расширение разметки (Markup Extensions) Привязка элементов Привязка данных Преобразование данных Конвертеры StringFormat Множественная привязка MultiBinding MultiValueCanverter StringFormat
32 Привязка нескольких источников к одному целевому свойству MultiBinding Целевое свойство изменяется при изменении любого из свойств Необходимо использовать либо MultiValueConverter, либо StringFormat (.NET 4) StringFormat может использовать столько параметров, сколько объектов Binding содержится в MultiBinding. Очередность параметров соответствует очерёдности объектов Binding
33 IMultiValueConverter Реализует IMultiValueConverter Convert ConvertBack Методы Convert и ConvertBack Преобразование от источников к целевому свойству : [] object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) Преобразование от целевого свойства к источнику : [][] object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) Отличие от обычных конвертеров только во множестве values ( и соответственно типов )
34 MultiBinding MultiValueConverter StringFormat
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.