Zdrojový kód L2DBForm.xaml.cs

Tato stránka obsahuje obsah a popis zdrojového kódu jazyka C# v souboru L2DBForm.xaml.cs. Částečnou třídu L2XDBForm obsaženou v tomto souboru lze rozdělit do tří logických částí: datové členy a OnRemove obslužné rutiny události a OnAddBook kliknutí na tlačítko.

Datové členy

K přidružení této třídy k prostředkům okna používaným v souboru L2DBForm.xaml se používají dva soukromé datové členy.

  • Proměnná myBooks oboru názvů je inicializována na "http://www.mybooks.com".

  • bookList Člen je inicializován v konstruktoru do řetězce CDATA v L2DBForm.xaml s následujícím řádkem:

    bookList = (XElement)((ObjectDataProvider)Resources["LoadedBooks"]).Data;
    

Obslužná rutina události OnAddBook

Tato metoda obsahuje následující tři příkazy:

  • První podmíněný příkaz se používá k ověření vstupu.

  • Druhý příkaz vytvoří nový XElement z řetězcových hodnot, které uživatel zadal v části Přidat nové uživatelské rozhraní (UI).

  • Poslední příkaz přidá tento nový element knihy do zprostředkovatele dat v L2DBForm.xaml. Dynamická datová vazba proto automaticky aktualizuje uživatelské rozhraní touto novou položkou; Nevyžaduje se žádný další uživatelský kód.

Obslužná rutina události OnRemove

Obslužná rutina OnRemove je složitější než obslužná rutina OnAddBook ze dvou důvodů. Za prvé, protože nezpracovaný KÓD XML obsahuje zachované prázdné znaky, musí být odpovídající nové řádky také odebrány s položkou knihy. Za druhé, výběr, který byl na odstraněné položce, se obnoví na předchozí položku v seznamu.

Základní práce při odebírání vybrané položky knihy se ale provádí pouze dvěma příkazy:

  • Nejprve se načte element knihy přidružený k aktuálně vybrané položce v seznamu:

    XElement selBook = (XElement)lbBooks.SelectedItem;
    
  • Potom se tento prvek odstraní z poskytovatele dat:

    selBook.Remove();
    

Dynamické datové vazby opět zajišťují, že se uživatelské rozhraní programu automaticky aktualizuje.

Příklad

Kód

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");
        }
    }
}

Komentáře

Přidružený zdroj XAML pro tyto obslužné rutiny naleznete ve zdrojovém kódu L2DBForm.xaml.

Viz také