Классы windows presentation foundation

22
Классы Windows Presentation Foundation System.Object DispatcherObject Application DependencyObject Visual UIElement FrameworkElement Page Shape TextBlock Control ContentContro l Frame Window NavigationWindow ButtonBase Button RepeatButt on ToggleButt on CheckBox RadioButto n RangeBase Slider ProgressBa r TextBoxBas e TextBox RichTextBo x ItemsContr ol MenuBase Menu ContextMen u HeaderedItemsCont rol MenuItem Toolbar TreeViewIt em Selector TabControl ListBox ListView ComboBox TreeView ToolBarTra y Panel Grid Canvas ContentElement FrameworkContentElement FrameworkTemplate Style NavigationService

Upload: halima

Post on 25-Feb-2016

56 views

Category:

Documents


3 download

DESCRIPTION

Классы Windows Presentation Foundation. Привязка данных ( Data Binding). Механизм привязки данных – программная модель для установления связи между элементом управления и данными приложения . Привязка данных WPF устанавливает связь между - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Классы  Windows Presentation Foundation

Классы Windows Presentation FoundationSystem.Object

DispatcherObject

Application DependencyObject

Visual

UIElement

FrameworkElement

Page Shape TextBlock Control

ContentControl

Frame

Window

NavigationWindow

ButtonBase

Button

RepeatButton

ToggleButton

CheckBox RadioButton

RangeBase

Slider

ProgressBar

TextBoxBase

TextBox

RichTextBox

ItemsControl

MenuBase

Menu ContextMenu

HeaderedItemsControl

MenuItem Toolbar TreeViewItem

Selector

TabControl ListBox

ListView

ComboBox

TreeView

ToolBarTray Panel

Grid Canvas

ContentElement

FrameworkContentElement

FrameworkTemplate Style

NavigationService

Page 2: Классы  Windows Presentation Foundation

Привязка данных (Data Binding) Механизм привязки данных – программная модель для установления связи между

элементом управления и данными приложения. Привязка данных WPF устанавливает связь между

• свойством (зависимости) элемента управления и свойством отдельного объекта приложения, в том числе и другого элемента управления;

• свойством элемента управления и свойством текущего элемента в списке объектов. WPF поддерживает привязку свойств зависимостей элементов управления к различным

источникам данных - к объектам CLR, включая объекты ADO.NET, к данным XML и объектам, связанным с веб-службами .

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

Привязку можно определить как в коде, так и в разметке. Модель привязки данных WPF похожа на модель привязки данных Windows Forms.

Концепция модели не изменилась, появилась дополнительная функциональность, модель стала более гибкой.

Page 3: Классы  Windows Presentation Foundation

Компоненты привязки

Привязка включает в себя как обязательные компоненты• объект-источник данных (data source) и его свойство, с которым будет установлена

связь; • объект-приемник данных(data target) и его свойство (целевое свойство привязки),

которое должно быть свойством зависимостей.

При выполнении привязки дополнительно можно определить • направление передачи данных;• момент обновления данных;• пользовательские методы преобразования данных при обмене данными между

источником и приемником;• пользовательские методы проверки корректности данных при обмене данными между

источником и приемником.

Большая часть этой информации передается модулю управления механизмом привязки WPF (WPF binding engine) через объект одного из классов Binding, MultiBinding или PriorityBinding.

Page 4: Классы  Windows Presentation Foundation

Классы для работы с привязками

Класс Binding описывает привязку для одного свойства источника данных. Класс Binding не содержит информации о целевом объекте привязки.

Класс BindingExpression поддерживает соединение между источником привязки и целью привязки.

Класс BindingOperations содержит статические методы для управления привязками.

Классы Validation, ValidationRule и ValidationResult поддерживают правила проверки корректности данных в привязке.

Object

MarkupExtension

BindingBase

Binding

MultiBinding

PriorityBinding

BindingOperations Expression

BindingExpressionBase

BindingExpression

MultiBindingExpression

PriorityBindingExpression

Validation ValidationRule

ExceptionValidationRule

ValidationResult

Page 5: Классы  Windows Presentation Foundation

Как указать источник данных

Источник данных в привязке можно задать явно через свойства Source, ElementName или RelativeSource класса Binding или унаследовать по умолчанию от свойства DataContext.

publicObject Source { get; set; } Объект, который используется как источник данных.

public string ElementName { get; set; }

Источник данных – другой элемент управления приложения. В качестве значения можно использовать свойство Name элемента управления.

publicRelativeSource RelativeSource { get; set; }

Объект RelativeSource, определяющий относительное местоположение источника данных. Умолчание null.Обычно используется для связи между двумя свойствами одного и того же объекта или при определении привязки в стиле (style) или шаблоне (template).

Можно установить значение только для одного из трех свойств ElementName, Source или RelativeSource, в противном случае будет брошено исключение.

Page 6: Классы  Windows Presentation Foundation

Свойство Path класса Binding

Через свойство Path объекта Binding можно передать• имя свойства объекта-источника данных; • имя свойства в случае, когда сам источник данных является свойством объекта-

источника.

Класс PropertyPath используется для описания свойств в привязке данных. В классе определены два конструктора publicPropertyPath( Object parameter ); Параметр конструктора - путь к CLR свойству или

отдельное свойство зависимости.

public PropertyPath ( string path, Object[] pathParameters);

Параметры конструктора - путь к CLR свойству в виде строки с разделителями и массив параметров.

public PropertyPath Path { get; set; }

public string Path { get; set; } Строка, которая описывает путь.

public Collection<Object> PathParameters { get; } Список параметров для пути с индексаторами.

и два свойства:

Page 7: Классы  Windows Presentation Foundation

Привязка в коде. Пример

Binding bd2 = new Binding();bd2.Source = mdi;bd2.Path = new PropertyPath("DoubleValue"); slider_1.SetBinding(Slider.ValueProperty, bd2);textBox_2.SetBinding(TextBox.TextProperty, bd2);

class DataItem : INotifyPropertyChanged { private string text; private double doubleValue; public DateTime Date { get; set; } public Point Point { get; set; } public Color Color { get; set; }

public event PropertyChangedEventHandler PropertyChanged; public string Text { get { return text; } set { text = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Text")); } } public double DoubleValue { get { return doubleValue; } set { doubleValue = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("DoubleValue")); } }[ …code …]}

В примерах источником данных является объект mdi класса DataItem.

Привязка устанавливает связь между свойством Text элемента управления TextBox и свойством Date объекта mdi типа DataItem.

Привязка устанавливает связь между свойством DoubleValue объекта mdi типа DataItem и свойствами Value элемента управления Slider и Text элемента управления TextBox.

Binding bd1 = new Binding();bd1.Source = mdi;bd1.Path = new PropertyPath("Date");textBox_1.SetBinding(TextBox.TextProperty, bd1);

Page 8: Классы  Windows Presentation Foundation

Источник данных, унаследованный от DataContext По умолчанию привязка наследует контекст данных, установленный через свойство

DataContext элемента управления. Свойство DataContext определено в классе FrameworkElement.

public Object DataContext { get; set; }

Свойство DataContext является свойством зависимостей и может наследовать значение свойства родительского элемента - если для элемента управления локально или через стиль не установлено значение свойства DataContext, для него будет использовано значение из ближайшего родительского элемента.

Явно указанный в привязке источник данных заменяет унаследованный контекст данных. В примере контекст данных определен для главного окна приложения. В привязке для

элемента управления textBox_11 не указан источник данных, поэтому как источник используется mdi_2, который унаследован от родительского элемента управления как DataContext.

this.DataContext = mdi_2;

Binding bd = new Binding();bd.Path = new PropertyPath("Text");textBox_11.SetBinding(TextBox.TextProperty, bd);

Page 9: Классы  Windows Presentation Foundation

Привязка в XAML. Пример

<Grid Height="317" Width="636" DataContext="{StaticResource mdi_Key1}">

[…code…]

<Slider Value="{Binding DoubleValue}" Height="30" Margin="10,210,10,0“ Grid.Column="1" /><TextBox Text ="{Binding Text}" Height="45" Margin="50,250,50,0“ />

<TextBox DataContext="{StaticResource mdi_Key2}" Text="{Binding Date}" Foreground="{Binding Brush}" Grid.Column="3" Height="25" Margin="10,20,12,0“ /></Grid>

В примере одним источником данных является объект пользовательского типа DataItem, который был добавлен в словарь ресурсов главного окна приложения с ключом mdi_Key1.

Этот объект использован как значение свойства DataContext родительского элемента Grid, а затем его свойства DoubleValue и Text указаны в привязках к элементам управления Slider и TextBox.

Для второго элемента управления TextBox как источник в привязках используется объект DataItem с ключом mdi_Key2. Этот объект установлен как значение свойства DataContext самого элемента TextBox. Его свойства Date и Brush связываются со свойствами Text и Foreground элемента управления.

Page 10: Классы  Windows Presentation Foundation

Класс ObjectDataProvider

Класс ObjectDataProvider дает возможность создать в XAML объект пользовательского типа, который инициализируется с использованием конструктора с параметрами. Созданный объект можно использовать в качестве источника привязки в XAML.

В классе ObjectDataProvider определены свойства :• ConstructorParameters для передачи параметров в конструктор объекта;• MethodName для вызова метода и MethodParameters для передачи параметров в

этот метод.

Page 11: Классы  Windows Presentation Foundation

Класс ObjectDataProvider. Пример В примере в ресурсах главного окна создается объект DataItem, в классе которого

определен конструктор с 4 параметрами. С помощью класса ObjectDataProvider параметрам конструктора передаются значения.

Типы string, double и DateTime находятся в сборке mscorlib.dll в пространстве имен System. С этим пространством имен в открывающем тэге элемента связан префикс system: .

Тип Point находится в сборке WindowsBase.dll в пространстве имен System.Windows. С этим пространством имен связан префикс spt: .

<Window.Resources>< ObjectDataProvider x:Key="mdi_Key3" ObjectType="{x:Type zz:DataItem} " xmlns:system="clr-namespace:System;assembly=mscorlib " xmlns:spt="clr-namespace:System.Windows;assembly=WindowsBase"> <ObjectDataProvider.ConstructorParameters> <system:String>ObjectDataProvider</system:String> <system:Double>1.234567</system:Double> <spt:Point>23,23</spt:Point> <system:DateTime>2009/04/07</system:DateTime> </ObjectDataProvider.ConstructorParameters></ObjectDataProvider></Window.Resources>

С объектом связан ключ mdi_Key3, который используется в привязках.

Page 12: Классы  Windows Presentation Foundation

Как указать целевой объект привязки в коде

В классах FrameworkElement и FrameworkContentElement определены методы SetBinding и GetBindingExpression – методы-оболочки, которые вызывают одноименные статические методы класса BindingOperations.

publicBindingExpressionBase SetBinding ( DependencyProperty dp, BindingBase binding );

Присоединяет объект binding, который описывает привязку, к элементу управления.

publicBindingExpression SetBinding ( DependencyProperty dp, string path );

Присоединяет привязку к элементу управления, используя для всех свойств привязки, кроме path, значения по умолчанию.

publicBindingExpression GetBindingExpression ( DependencyProperty dp );

Возвращает объект BindingExpression, если для целевого свойства есть привязка, null в противном случае.

Page 13: Классы  Windows Presentation Foundation

Направление привязки

TwoWay Целевое свойство обновляется при изменении свойства источника и источник данных обновляется при изменении целевого свойства.

OneWay Целевое свойство обновляется при изменении свойства источника.

OneTime Целевое свойство изменяется только один раз - при инициализации, т.е. при запуске приложения или при изменении DataContext.

OneWayToSource Источник данных обновляется при изменении целевого свойства элемента управления.

Default Тип привязки зависит от целевого свойства, например, для TextBox это TwoWay.

Свойство принимает одно из значений перечисления BindingMode и определяет направление, в котором передаются данные.

public BindingMode Mode { get; set; }

Направление потока данных в привязке управляется свойством Mode класса Binding.

В режимах OneWay и TwoWay автоматическое обновление элементов управления при изменении данных в источнике работает только в том случае, когда источник данных реализует интерфейс INotifyPropertyChanged.

Page 14: Классы  Windows Presentation Foundation

Момент обновления значения в источнике

public UpdateSourceTrigger UpdateSourceTrigger { get; set; }

PropertyChanged Источник обновляется немедленно после изменения целевого свойства.

LostFocus Источник обновляется после того, как элемент управления теряет фокус ввода.

Explicit Источник обновляется только при явном вызове метода UpdateSource класса BindingExpression.

Default Зависит от целевого свойства. Обычно значение по умолчанию - PropertyChanged.

Свойство принимает одно из значений перечисления UpdateSourceTrigger:

Привязки в режимах TwoWay и OneWayToSource обновляют данные в источнике в ответ на изменение свойства целевого элемента управления.

Момент обновления источника управляется значением свойства UpdateSourceTrigger класса Binding.

Значением по умолчанию для UpdateSourceTrigger для большинства свойств зависимостей является PropertyChanged.

Значением по умолчанию для свойства Text в TextBox является LostFocus, так как обновление источника после ввода каждого символа уменьшает производительность.

Page 15: Классы  Windows Presentation Foundation

Класс BindingExpression Класс Binding описывает привязку для отдельного свойства источника данных и дает

возможность настроить характеристики привязки. Класс Binding не содержит информации о целевом объекте привязки.

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

Один и тот же объект Binding можно использовать для создания нескольких привязок. Для каждой из них будет создан экземпляр BindingExpression, все они будут совместно использовать один и тот же объект Binding.

Ссылку на объект BindingExpression можно получить как возвращаемое значение метода GetBindingExpression класса BindingOperations или класса FrameworkElement.

Методы класса BindingExpression для явного обмена данными между источником и приемником:

public void UpdateSource(); Обновляет данные источника в привязках TwoWay и OneWayToSource.

public void UpdateTarget();

Обновляет значение целевого свойства элемента управления. Можно использовать для передачи данных в элемент управления в привязках OneWay или TwoWay, если источник не реализует интерфейс INotifyPropertyChanged.

Page 16: Классы  Windows Presentation Foundation

Класс BindingExpression. Информация о привязке

В классе BindingExpression определены свойства с информацией о привязке и ее состоянии.

Некоторые свойства класса BindingExpression.

public Object DataItem { get; } Объект источника привязки.

public Binding ParentBinding { get; }

Возвращает объект Binding для вызывающего BindingExpression .

public BindingStatus Status { get; }

Значение перечисления BindingStatus, которое описывает статус выражения привязки.В частности, перечисление имеет значения Active и PathError.

Page 17: Классы  Windows Presentation Foundation

Класс BindingOperations

public static bool IsDataBound ( DependencyObject target, DependencyProperty dp );

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

public static Binding GetBinding ( DependencyObject target, DependencyProperty dp );

Возвращает объект Binding, связанный со свойством целевого объекта, или null.

public static BindingExpression GetBindingExpression ( DependencyObject target, DependencyProperty dp );

Возвращает объект BindingExpression, связанный со свойством целевого объекта или null.

public static void ClearBinding ( DependencyObject target, DependencyProperty dp );

Удаляет привязку , присоединенную к свойству объекта DependencyObject, и восстанавливает значение, которое имело свойство до выполнения привязки.

public static void ClearAllBindings ( DependencyObject target );

Удаляет все привязки из указанного DependencyObject.

public static BindingExpressionBase SetBinding ( DependencyObject target, DependencyProperty dp, BindingBase binding );

Создает новый экземпляр BindingExpressionBase и связывает его с заданным свойством цели привязки.

Класс предоставляет статические методы для работы с привязками.

Page 18: Классы  Windows Presentation Foundation

Преобразователи значений (converters) Механизм привязки по умолчанию использует преобразователь (default converter), который

выполняет преобразование значений при передаче данных из источника в приемник. Если преобразование выполнить нельзя возвращается значение null.

Пользовательское преобразование значений для привязки определяется в методах Convert и ConvertBack классов, реализующих интерфейс IValueConverter.

Интерфейс IValueConverter :

public interface IValueConverter { Object Convert( Object value, Type targetType, Object parameter, CultureInfo culture ); Object ConvertBack( Object value, Type targetType, Object parameter, CultureInfo culture );}

Механизм привязки данных WPF вызывает метод Convert при передаче данных из источника в приемник и метод ConvertBack при передаче данных в обратном направлении.

Привязка не перехватывает исключения, брошенные пользовательскими преобразователями, они трактуются как ошибки времени выполнения.

Если преобразователь значений не смог выполнить преобразование следует использовать в качестве возвращаемого значения DependencyProperty.UnsetValue, тогда механизм привязки данных использует значение FallbackValue, если оно определено, и значение default в противном случае.

Page 19: Классы  Windows Presentation Foundation

Преобразователи значений. Пример

В примере определен класс PointConverter, реализующий интерфейс IValueConverter, который выполняет пользовательское преобразование объектов типа Point к типу string.

Для обратного преобразования используется преобразование по умолчанию.

[ValueConversion(typeof(Point), typeof(string))] class PointConverter : IValueConverter { public object Convert( object value, Type targetType, object parameter,

System.Globalization.CultureInfo culture) { Point pt = (Point)value; return " x=" + pt.X + " y=" + pt.Y; } public object ConvertBack( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return value; } }

Page 20: Классы  Windows Presentation Foundation

Преобразователи значений. Пример (продолжение)

Объект класса PointConverter, добавлен в словарь ресурсов главного окна приложения с ключом ptConverter_Key.

Преобразователь с ключом ptConverter_Key используется в привязке для элемента управления TextBox.

<Window x:Class="Wpf_Binding_1_xaml.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:yy="clr-namespace:Wpf_Binding_1" Title="Window1" Height="414" Width="498" Loaded="Window_Loaded"> <Window.Resources> <yy:PointConverter x:Key="ptConverter_Key"/> </Window.Resources>[…code…]</ Window>

<TextBox Text="{Binding Path=Point, Converter={StaticResource ptConverter_Key}}" Height="25" Margin="10,130,10,0" Name="textBox_13”/>

Page 21: Классы  Windows Presentation Foundation

Свойства класса Binding для определения пользовательских преобразователей значений

Информация о пользовательском преобразователе передается через свойства объекта Binding:

public IValueConverter Converter { get; set; } Преобразователь значений при передаче данных из

источника в приемник.

public CultureInfo ConverterCulture { get; set; }

Региональные установки (культура), в которых выполняется преобразование значений. Умолчание null.

public Object ConverterParameter { get; set; }

Параметр, который передается Converter. Умолчание null.

Использование в коде преобразователя значений из предыдущего примера :Binding bd = new Binding();bd.Path = new PropertyPath("Point");bd.Converter = new PointConverter();textBox_conv_2.SetBinding(TextBox.TextProperty, bd);

Page 22: Классы  Windows Presentation Foundation

Свойство FallbackValue класса Binding

Свойство определяет значение для случая, когда привязка не может вернуть значение. Значение по умолчанию равно DependencyProperty.UnsetValue.

Привязка возвращает значение, если• путь к источнику данных успешно определен (resolve);• преобразователь значений, если он определен, может выполнить преобразование;• результирующее значение является корректным значением целевого свойства

приемника.

public Object FallbackValue { get; set; }