De broncode van L2DBForm.xaml.cs

Deze pagina bevat de inhoud en beschrijving van de C#-broncode in het bestand L2DBForm.xaml.cs. De gedeeltelijke klasse L2XDBForm in dit bestand kan worden onderverdeeld in drie logische secties: datavelden en de knop OnRemove en OnAddBook klik-eventhandlers.

Gegevensleden

Twee privé dataleden worden gebruikt om deze klasse te koppelen aan de vensterbronnen die worden gebruikt in L2DBForm.xaml.

  • De naamruimtevariabele myBooks wordt geïnitialiseerd voor "http://www.mybooks.com".

  • Het lid bookList wordt geïnitialiseerd in de constructor naar de CDATA-tekenreeks in L2DBForm.xaml met de volgende regel:

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

OnAddBook-gebeurtenisafhandelaar

Deze methode bevat de volgende drie instructies:

  • De eerste voorwaardelijke instructie wordt gebruikt voor invoervalidatie.

  • Met de tweede instructie wordt een nieuwe XElement gemaakt op basis van de tekenreekswaarden die de gebruiker heeft ingevoerd in de sectie Nieuw boek toevoegen gebruikersinterface( UI).

  • De laatste verklaring voegt dit nieuwe boekelement toe aan de gegevensprovider in L2DBForm.xaml. Dynamische gegevensbinding werkt de gebruikersinterface daarom automatisch bij met dit nieuwe item; er is geen extra door de gebruiker opgegeven code vereist.

OnRemove-gebeurtenis-handler

De OnRemove handler is om twee redenen ingewikkelder dan de OnAddBook handler. Ten eerste moeten, omdat de onbewerkte XML behouden witruimte bevat, de overeenkomende nieuwe regels ook worden verwijderd met de boekinvoer. Ten tweede wordt de selectie, die zich op het verwijderde item bevond, opnieuw ingesteld op de vorige in de lijst.

Het belangrijkste werk van het verwijderen van het geselecteerde boekitem wordt echter slechts door twee instructies uitgevoerd:

  • Eerst wordt het boekelement dat is gekoppeld aan het geselecteerde item in de keuzelijst opgehaald:

    XElement selBook = (XElement)lbBooks.SelectedItem;
    
  • Vervolgens wordt dit element verwijderd uit de gegevensprovider:

    selBook.Remove();
    

Nogmaals, dynamische gegevensbinding zorgt ervoor dat de gebruikersinterface van het programma automatisch wordt bijgewerkt.

Voorbeeld

Code

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

Opmerkingen

Zie L2DBForm.xaml-broncodevoor de bijbehorende XAML-bron voor deze handlers.

Zie ook