Code source de L2DBForm.xaml.csL2DBForm.xaml.cs Source Code

Cette rubrique présente le contenu et la description du code source C# dans le fichier L2DBForm.xaml.cs.This topic contains the contents and description of the C# source code in the file L2DBForm.xaml.cs. La classe partielle L2XDBForm contenue dans ce fichier peut être divisée en trois sections logiques : les membres de données et les gestionnaires d'événements de clic sur le bouton OnRemove et OnAddBook.The L2XDBForm partial class contained in this file can be divided into three logical sections: data members and the OnRemove and OnAddBook button click event handlers.

Membres de donnéesData Members

Deux membres de données privés sont utilisés pour associer cette classe aux ressources de fenêtre utilisées dans L2DBForm.xaml.Two private data members are used to associate this class to the window resources used in L2DBForm.xaml.

  • La variable d'espace de noms myBooks est initialisée à "http://www.mybooks.com".The namespace variable myBooks is initialized to "http://www.mybooks.com".

  • Le membre bookList est initialisé dans le constructeur à la chaîne CDATA dans L2DBForm.xaml avec la ligne suivante :The member bookList is initialized in the constructor to the CDATA string in L2DBForm.xaml with the following line:

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

Gestionnaire d'événements OnAddBookOnAddBook Event Handler

Cette méthode contient les trois instructions suivantes :This method contains the following three statements:

  • La première instruction conditionnelle est utilisée pour la validation d’entrée.The first conditional statement is used for input validation.

  • La deuxième instruction crée un nouveau XElement à partir des valeurs de chaîne que l’utilisateur a entrées dans la section d’interface utilisateur Add New Book.The second statement creates a new XElement from the string values the user entered in the Add New Book user interface (UI) section.

  • La dernière instruction ajoute ce nouvel élément au fournisseur de données dans L2DBForm.xaml.The last statement adds this new book element to the data provider in L2DBForm.xaml. En conséquence, la liaison de données dynamiques mettra automatiquement à jour l'interface utilisateur avec ce nouvel élément ; aucun code supplémentaire fourni par l'utilisateur n'est nécessaire.Consequently, dynamic data binding will automatically update the UI with this new item; no extra user-supplied code is required.

Gestionnaire d'événements OnRemoveOnRemove Event Handler

Le gestionnaire OnRemove est plus complexe que le gestionnaire OnAddBook pour deux raisons.The OnRemove handler is more complicated than the OnAddBook handler for two reasons. Tout d'abord, le code XML brut contenant des espaces conservés, les nouvelles lignes correspondantes doivent également être supprimées avec l'entrée de livre.First, because the raw XML contains preserved white space, matching newlines must also be removed with the book entry. Ensuite, pour plus de commodité, la sélection (qui était sur l'élément supprimé) est réinitialisée à l'élément précédent dans la liste.Second, as a convenience, the selection, which was on the deleted item, is reset to the previous one in the list.

Toutefois, le travail principal lié à la suppression de l'élément de livre sélectionné est effectué par deux instructions uniquement :However the core work of removing the selected book item is accomplished by only two statements:

  • Tout d'abord, l'élément de livre associé à l'élément actuellement sélectionné dans la zone de liste est récupéré :First, the book element associated with the currently selected item in the list box is retrieved:

    XElement selBook = (XElement)lbBooks.SelectedItem;
    
  • Ensuite, cet élément est supprimé du fournisseur de données :Then, this element is deleted from the data provider:

    selBook.Remove();
    

Là encore, la liaison de données dynamiques s'assure que l'interface utilisateur du programme est mise à jour automatiquement.Again, dynamic data binding assures that the program's UI is automatically updated.

ExempleExample

CodeCode

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

CommentairesComments

Pour obtenir la source XAML associée pour ces gestionnaires, consultez Code source de L2DBForm.xaml.For the associated XAML source for these handlers, see L2DBForm.xaml Source Code.

Voir aussiSee also