Поделиться через


исходный код L2DBForm.xaml.cs

Эта страница содержит содержимое и описание исходного кода 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.

См. также