Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Эта страница содержит содержимое и описание исходного кода C# в файле L2DBForm.xaml.cs. Частичный класс L2XDBForm, содержащийся в этом файле, можно разделить на три логических раздела: члены данных, а также обработчики событий нажатия кнопок OnRemove и OnAddBook.
Элементы данных
Два члена частных данных используются для связывания этого класса с ресурсами окна, используемыми в L2DBForm.xaml.
Переменная пространства имен
myBooksпроинициализирована на"http://www.mybooks.com".Элемент
bookListинициализирован в конструкторе к строке CDATA в файле L2DBForm.xaml следующей строкой:bookList = (XElement)((ObjectDataProvider)Resources["LoadedBooks"]).Data;
Обработчик событий OnAddBook
Этот метод содержит следующие три оператора:
Первая условная инструкция используется для проверки входных данных.
Вторая инструкция создает новый XElement из строковых значений, введенных пользователем в разделе Добавление новой книги пользовательского интерфейса.
Последнее утверждение добавляет новый элемент книги поставщику данных в L2DBForm.xaml. Следовательно, динамическая привязка данных автоматически обновляет пользовательский интерфейс с помощью этого нового элемента; дополнительный код, предоставленный пользователем, не требуется.
Обработчик событий OnRemove
Обработчик OnRemove более сложный, чем обработчик OnAddBook по двум причинам. Во-первых, поскольку необработанный XML-код содержит сохраненное пробелы, соответствующие новые линии также должны быть удалены с записью книги. Во-вторых, в качестве удобства выбор, который был на удаленном элементе, сбрасывается до предыдущего в списке.
Однако основная работа по удалению выбранного элемента книги выполняется только двумя инструкциями:
Сначала извлекается элемент книги, связанный с текущим выбранным элементом в списке:
XElement selBook = (XElement)lbBooks.SelectedItem;Затем этот элемент удаляется из поставщика данных:
selBook.Remove();
Опять же, динамическая привязка данных гарантирует автоматическое обновление пользовательского интерфейса программы.
Пример
Код
using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Input;
using System.Xml;
using System.Xml.Linq;
namespace LinqToXmlDataBinding {
/// <summary>
/// Interaction logic for L2XDBForm.xaml
/// </summary>
public partial class L2XDBForm : System.Windows.Window
{
XNamespace mybooks = "http://www.mybooks.com";
XElement bookList;
public L2XDBForm()
{
InitializeComponent();
bookList = (XElement)((ObjectDataProvider)Resources["LoadedBooks"]).Data;
}
void OnRemoveBook(object sender, EventArgs e)
{
int index = lbBooks.SelectedIndex;
if (index < 0) return;
XElement selBook = (XElement)lbBooks.SelectedItem;
//Get next node before removing element.
XNode nextNode = selBook.NextNode;
selBook.Remove();
//Remove any matching newline node.
if (nextNode != null && nextNode.ToString().Trim().Equals(""))
{ nextNode.Remove(); }
//Set selected item.
if (lbBooks.Items.Count > 0)
{ lbBooks.SelectedItem = lbBooks.Items[index > 0 ? index - 1 : 0]; }
}
void OnAddBook(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(tbAddID.Text) ||
String.IsNullOrEmpty(tbAddValue.Text))
{
MessageBox.Show("Please supply both a Book ID and a Value!", "Entry Error!");
return;
}
XElement newBook = new XElement(
mybooks + "book",
new XAttribute("id", tbAddID.Text),
tbAddValue.Text);
bookList.Add(" ", newBook, "\r\n");
}
}
}
Комментарии
Сведения о связанном источнике XAML для этих обработчиков см. в исходном коде L2DBForm.xaml.
См. также
.NET Desktop feedback