|
Программирование >> Расширенный wf
С целевым объектом вы можете вызывать метод SetBinding() для определения привязки. Здесь целью служит объект Canvas по имени FunnyFace. Метод SetBinding() требует двух параметров: первый - это свойство зависимости, а второй - объект привязки. Свойство Canvas.Left должно быть привязано, поэтому свойство привязки типа DependencyProperty может быть доступно через поле Canvas.LeftProperty. Binding binding = new Binding(); binding.Path = new PropertyPath( Value ); binding.Source = slider; FunnyFace.SetBinding(Canvas.LeftProperty, binding); Для класса Binding вы можете конфигурировать множество опций привязки, которые описаны в табл. 35.2. Таблица 35.2. Свойства класса Binding Свойство Source RelativeSource ElementName Path Xpath Mode Converter FallbackValue ValidationRules Описание Свойством Source вы определяете объект-источник для привязки данных. Свойством RelativeSource вы можете специфицировать источник по отношению к объекту-цели. Это удобно для отображения сообщений об ошибках, когда источник ошибки поступает из того же элемента управления. Если источник - элемент WPF, вы можете специфицировать источник свойством ElementName. С помощью свойства Path вы можете специфицировать путь к объекту-источнику. Это может быть свойство объекта-источника, но индексаторы и свойства дочерних элементов также поддерживаются. С источником данных XML вы можете определить выражение запроса XPath, чтобы получать данные для привязки. Mode задает направление для привязки. Свойство Mode имеет тип BindingMode - перечисление, состоящее из следующих значений: Default, OneTime, OneWay, TwoWay, OneWayToSource. Значение по умолчанию зависит от цели: для TextBox двунаправленная привязка принята по умолчанию; для элемента Label, который доступен только для чтения, стандартной является однонаправленная привязка. OneTime означает, что данные загружаются из источника только при инициализации, а OneWay также выполняет обновления из источника в цели. Привязка TwoWay обеспечивает запись изменений WPF-элемента обратно в источник. OneWayToSource означает, что данные никогда не читаются, а только записываются из цели в источник. С помощью свойства Converter вы можете специфицировать класс конвертера, который преобразует данные из пользовательского интерфейса и обратно. Класс конвертера должен реализовывать интерфейс IValueConverter, который определяет методы Convert() и ConvertBack(). Вы можете передавать параметры методам конвертера со свойством ConverterParameter. Конвертер может быть зависимым от культуры; культура может быть установлена в свойстве ConverterCulture. Посредством свойства FallbackValue вы можете определять значение по умолчанию, используемое в случае, когда привязка не возвращает значения. С помощью свойства ValidationRules вы можете определить коллекцию объектов ValidationRule, проверяемых перед тем, как источник обновится по целевым элементам WPF. Класс ExceptionValidationRule наследуется от класса ValidationRule и проверяется на предмет исключений. Привязка простого объекта Для привязки объектов CLR вместе с классами .NET вы должны определять свойства, как показано в следующем примере класса Book и его свойств Title, Publisher, Isbn и Authors. public class Book public Book(string title, string publisher, string isbn, params string[] authors) this.title = title; this.publisher = publisher; this.isbn = isbn; foreach (string author in authors) this.authors.Add(author); public Book() : this( unknown , unknown , unknown ) public string Title { get; set; } public string Publisher { get; set; } public string Isbn { get; set; } public override string ToString() return title; private readonly List<string> authors = new List<string>(); public string[] Authors get { return authors.ToArray(); } В пользовательском интерфейсе определены несколько меток и элементов - текстовых полей для отображения информации о книге. Используя расширения разметки Binding, элементы управления TextBox привязываются к свойствам класса Book. В расширении разметки Binding не определяется ничего помимо свойства Path, служащего для привязки свойства класса Book. Определять источник необходимости нет, поскольку источник определяется присвоением DataContext, что видно в приведенном ниже отделенном коде. Режим привязки для элемента TextBox выбирается по умолчанию, т.е. является двунаправленным. <Window x:Class= ObjectBindingSample.Window1 xmlns= http: schemas.microsoft.com/winfx/2 00 6/xaml/presentation xmlns:x= http: schemas.microsoft.com/winfx/2 006/xaml Title= Object Binding Sample Height= 300 Width= 340 > <Grid Name= bookGrid Margin= 5 > <Grid.ColumnDefinitions> <ColumnDefinition Width= 30* /> <ColumnDefinition Width= 70* /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height= 50 /> <RowDefinition Height= 50 /> <RowDefinition Height= 50 /> <RowDefinition Height= 50 /> <RowDefinition Height= 50 /> </Grid.RowDefinitions> 0 Grid.Row= 0 >Title:</Label> Height= 30 Grid.Column= 1 Grid.Row= 0 Title} /> 0 Grid.Row= 1 >Publisher:</Label> Height= 30 Grid.Column= 1 Grid.Row= 1 Publisher} /> 0 Grid.Row= 2 >ISBN:</Label> Height= 30 Grid.Column= 1 Grid.Row= 2 Text= {Binding Isbn} /> <Button Margin= 5 Grid.Column= 1 Grid.Row= 4 Name= bookButton >Open Dialog</Button> </Grid> </Window> <Label Grid.Column= <TextBox Width= 200 Text= {Binding <Label Grid.Column= <TextBox Width= 200 Text= {Binding <Label Grid.Column= <TextBox Width= 200 Click= bookButton Click В отделенном коде создается новый объект Book, и книга присваивается свойству DataContext элемента управления Grid. Свойство DataContext - свойство зависимости, определенное в базовом классе FrameworkElement. Присваивание DataContext с элементом Grid означает, что каждый элемент Grid имеет привязку по умолчанию к одному и тому же контексту данных. public partial class Window1 : System.Windows.Window private Book book1 = new Book(); public Window1() InitializeComponent(); bookl.Title = Professional C# 2005 with .NET 3.0 ; bookl.Publisher = Wrox Press ; bookl.Isbn = 978-0470124727 ; bookGrid.DataContext = book1; После запуска приложения вы можете увидеть привязанные данные, как показано на рис. 35.4. Для демонстрации двунаправленной привязки (изменения при вводе в элемент WPF отражаются внутри объекта CLR) реализован метод OnOpenBookDialog() . Этот метод назначен событию Click кнопки bookButton, что можно видеть в коде XAML. При щелчке на кнопке всплывает окно сообщения, отображающее текущий заголовок и номер ISBN объекта bookl. На рис. 35.5 показан вывод окна сообщения после внесения изменений во время выполнения. Рис. 35.4. Привязка простого объекта Рис. 35.5. Вывод окна сообщения
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |