Compartir a través de


L2DBForm.xaml.cs código fuente

Esta página contiene el contenido y la descripción del código fuente de C# en el archivo L2DBForm.xaml.cs. La clase parcial L2XDBForm contenida en este archivo se puede dividir en tres secciones lógicas: miembros de datos, y los controladores de eventos de clic de botón de OnRemove y OnAddBook.

Miembros de datos

Se usan dos elementos de datos privados para asociar esta clase a los recursos de ventana utilizados en L2DBForm.xaml.

  • La variable myBooks de espacio de nombres se inicializa en "http://www.mybooks.com".

  • El miembro bookList se inicializa en el constructor con la cadena CDATA en L2DBForm.xaml con la siguiente línea:

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

Controlador de eventos OnAddBook

Este método contiene las tres instrucciones siguientes:

  • La primera instrucción condicional se usa para la validación de datos de entrada.

  • La segunda instrucción crea un nuevo XElement a partir de los valores de cadena que el usuario escribió en la sección de la Agregar nuevo libro interfaz de usuario (UI).

  • La última instrucción agrega este nuevo elemento de libro al proveedor de datos en L2DBForm.xaml. Por lo tanto, el enlace de datos dinámicos actualizará automáticamente la interfaz de usuario con este nuevo elemento; no se requiere código adicional proporcionado por el usuario.

Controlador de eventos OnRemove

El OnRemove controlador es más complicado que el OnAddBook controlador por dos motivos. En primer lugar, dado que el XML sin formato contiene espacios en blanco conservados, las nuevas líneas correspondientes también deben eliminarse junto con la entrada del libro. En segundo lugar, como comodidad, la selección, que estaba en el elemento eliminado, se restablece a la anterior de la lista.

Sin embargo, la tarea principal de eliminar el elemento seleccionado del libro solo se realiza mediante dos instrucciones.

  • En primer lugar, se recupera el elemento de libro asociado al elemento actualmente seleccionado en la lista.

    XElement selBook = (XElement)lbBooks.SelectedItem;
    
  • A continuación, este elemento se elimina del proveedor de datos:

    selBook.Remove();
    

De nuevo, el enlace de datos dinámicos garantiza que la interfaz de usuario del programa se actualiza automáticamente.

Ejemplo

Código

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

Comentarios

Para obtener el origen XAML asociado para estos controladores, consulta Código fuente L2DBForm.xaml.

Consulte también