Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
course_(Windows&Web).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.68 Mб
Скачать

Двусторонняя привязка данных

Одним из мощных способов привязки данных, который поможет привязать данные об адресе, например из базы данных, XML-файла или какого-либо другого хранилища данных, является использование бизнес-объекта в качестве посредника между хранилищем и пользовательским интерфейсом. Давайте создадим объект для адреса, сопоставимого с данными, которые мы хотим отобразить (несмотря на то, что обычный бизнес-объект, скорее всего, не будет так тесно связан с конкретной страницей пользовательского интерфейса). В таблице 7.1 представлены свойства и переменные класса Address:

Private Member Variable

Public Property

Location

Location

address1

Address1

address2

Address2

City

City

Таблица 7.1. Структура класса Address.

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

using System.Collections.Generic; using System.ComponentModel; namespace Example {     public class Address : INotifyPropertyChanged     { 

Не забывайте, что каждое свойство кроме своей переменной обладает своим методом для получения данных (Get) и методом установки данных (Set), которые также вызывают событие notification.

Заменим все явно заданные значения Text Block привязанными значениями

<TextBox x:Name="Location"     Style="{StaticResource TextBoxStyle}"     Text ="{Binding Location, Mode=TwoWay}"     Grid.Row="2" Grid.Column="3" /> …

В оставшихся элементах так же заменяем явно заданные значения.

Шаг 2. Добавление обработки событий клавиатуры

Для реализации функциональности "быстрых клавиш" нам необходимо осуществить реакцию на события клавиатуры, полученные элементом StackPanel, в частности событие KeyDown. Событие KeyDown является пузырьковым событием.

Мы можем начать с простого и отвечать на любые события клавиатуры путем заполнения формы адресом компании Microsoft. Присвоим классу защищенный объект (private) Address, для которого мы определим память в конструкторе. Также будем обрабатывать стандартное событие Loaded, которое вызывается при загрузке страницы.

public partial class MainPage : UserControl {     private Address theAddress;     public MainPage()     {         InitializeComponent();         address = new Address();         Loaded += new RoutedEventHandler(OnLoaded);     }

В OnLoaded мы хотим создать обработчик события для KeyDown при регистрации любого события клавиши для любого элемента управления в пределах табличной сетки, которую мы назвали AddressGrid в MainPage.xaml следующим образом,

<Grid x:Name="AddressGrid" Background="Bisque" >

При сохранении страницы MainPage.xaml данный определитель мгновенно будет доступен в фоновом коде, и мы можем получить доступ к его свойствам и событиям, включая событие KeyDown.

void OnLoaded(object sender, RoutedEventArgs e) {     AddressGrid.KeyDown += new KeyEventHandler(AddressGrid_KeyDown); }

Visual Studio 2010 предложит вам создать программную оболочку для обработчика события, что нам как раз и нужно. Нам необходимо заполнить форму адресом компании Microsoft при нажатии Ctrl+M.

void AddressGrid_KeyDown(object sender, KeyEventArgs e) {     if (e.Key == Key.M && Keyboard.Modifiers == ModifierKeys.Control)     {         address.Location = "Microsoft";         address.Address1 = "One Microsoft Way";         address.Address2 = "Building 10";         address.City = "Redmond, WA 98052";     }     this.DataContext = theAddress; } 

Обратите внимание на то, что мы завершаем событие установкой DataContext страницы в только что заполненный объект Address. Результатом будет объект для привязки к элементам управления.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]