Программирование >>  Расширенный wf 

1 ... 3 4 5 [ 6 ] 7 8 9 ... 15


Теперь класс селектора может быть присвоен свойству

ItemTemplateSelector класса ListBox:

<ListBox ItemsSource= {Binding} ItemTemplateSelector=

{StaticResource bookTemplateSelector} />

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


Рис. 35.11. Шаблоны данных, зависящие от издателя

Привязка к XML

Механизм привязки данных WPF имеет специальную поддержку для привязки данных XML. Вы можете применять XmlDataProvider в качестве источника данных и привязывать элементы, используя выражения XPath. Для иерархического отображения вы можете применить элемент управления TreeView и создавать представление элементов с применением HierarchicalDataTemplate.

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

<?xml version= 1.0 encoding= utf-8 ?>

<Books>

<Book isbn= 978-0-470-12472-7 >

<Title>Professional C# 2008</Title> <Publisher>Wrox Press</Publisher> <Author>Christian Nagel</Author> <Author>Bill Evjen</Author> <Author>Jay Glynn</Author> <Author>Karli Watson</Author> <Author>Morgan Skinner</Author>

</Book>

<Book isbn= 978-0-7645-43 82-1 >

<Title>Beginning Visual C# 2008</Title> <Publisher>Wrox Press</Publisher> <Author>Karli Watson</Author> <Author>David Espinosa</Author> <Author>Zach Greenvoss</Author> <Author>Jacob Hammer Pedersen</Author> <Author>Christian Nagel</Author> <Author>John D. Reid</Author> <Author>Matthew Reynolds</Author> <Author>Morgan Skinner</Author>

<Author>Eric White</Author> </Book> </Books>

Подобно определению поставщика объектных данных, вы можете определить поставщика данных XML. И ObjectDataProvider, и XmlDataProvider унаследованы от одного и того же базового класса DataSourceProvider. В примере с XmlDataProvider свойство Source устанавливается в ссылку на XML-файл books.xml. Свойство XPath определяет XPath-выражение для обращения к корневому элементу XML Books. Элемент Grid ссылается на источник данных XML с помощью свойства DataContext. В контексте данных для Grid все элементы Book требуются для привязки списка, поэтому выражение XPath установлено в Book. Внутри Grid вы можете найти элемент ListBox, который привязан к контексту данных по умолчанию и использует DataTemplate для включения заголовка в элементы TextBlock как составные части



ListBox. Внутри Grid вы также можете видеть три элемента Label с привязкой данных, установленной выражениями XPath, для отображения заголовка, издателя и номеров ISBN.

<Window x:Class= XmlBindingSample.Window1

xmlns= http: schemas.microsoft.com/winfx/20 06/xaml/presentation xmlns:x= http: schemas.microsoft.com/winfx/200 6/xaml Title= XML Binding Height= 348 Width= 498 >

<Window.Resources>

<XmlDataProvider x:Key= books Source= Books.xml XPath= Books /> <DataTemplate x:Key= listTemplate >

<TextBlock Text= {Binding XPath=Title} /> </DataTemplate>

<Style x:Key= labelStyle TargetType= {x:Type Label} > <Setter Property= Width Value= 190 /> <Setter Property= Height Value= 40 /> <Setter Property= Margin Value= 5 />

</Style> </Window.Resources>

<Grid DataContext= {Binding Source={StaticResource books}, XPath=Book} > <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <ListBox IsSynchronizedWithCurrentItem= True Margin= 5,5,5,5 Grid.Column= 0 Grid.RowSpan= 4 ItemsSource= {Binding} ItemTemplate= {StaticResource listTemplate} /> <Label Style= {StaticResource labelStyle}

Grid.Row= 0 Grid.Column= 1 /> <Label Style= {StaticResource labelStyle}

Grid.Row= 1 Grid.Column= 1 /> <Label Style= {StaticResource labelStyle} Grid.Row= 2 Grid.Column= 1 /> </Grid> </Window>

Content= {Binding XPath=Title} Content= {Binding XPath=Publisher} Content= {Binding XPath=@isbn}

На рис. 35.12 показан результат привязки к XML.

Если данные XML должны быть отображены иерархически, то для этого вы можете использовать элемент управления TreeView.


Рис. 35.12. Пример привязки к XML



Проверка привязки

Доступны несколько опций для проверки достоверности данных, поступивших от пользователя, прежде чем они будут использованы объектами .NET:

□ обработка исключений;

□ информация об ошибках данных;

□ специальные правила проверки достоверности.

Обработка исключений

Одной из опций, которые продемонстрированы здесь, является то, что класс .NET генерирует исключение при установке неправильных данных, как показано в классе SomeData. Свойство Valuel принимает значение, большее или равное 5 и меньшее 12.

public class SomeData

private int valuel; public int Value1 {

return valuel;

set {

if (value < 5 value > 12) throw new ArgumentException(

value must not be less than 5 or greater than 12 ); valuel = value;

В конструкторе класса Windowl инициализируется новый объект класса SomeData и передается DataContext для привязки данных:

public partial class Windowl : Window

SomeData pl = new SomeData() { Valuel = ll }; public Windowl()

InitializeComponent(); this.DataContext = pl;

Метод-обработчик событий buttonSubmit Click отображает окно сообщения для показа действительного значения экземпляра SomeData:

private void buttonSubmit Click(object sender, RoutedEventArgs e) {

MessageBox.Show(pl.Valuel.ToString());

При простой привязке данных здесь свойство Text объекта TextBox привязывается к свойству Valuel. Если теперь вы запустите приложение и попытаетесь изменить значение на неправильное, вы можете убедиться, что значение не будет изменено, щелкнув на кнопке Submit (Отправить). WPF перехватывает и игнорирует исключения, сгенерированные методом доступа set свойства Valuel.

<Label Margin= 5 Grid.Row= 0 Grid.Column= 0 >Valuel:</Label>

<TextBox Margin= 5 Grid.Row= 0 Grid.Column= l Text= {Binding Path=Valuel} />



1 ... 3 4 5 [ 6 ] 7 8 9 ... 15

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика