Codice sorgente di L2DBForm.xaml.cs
In questo argomento vengono forniti il contenuto e la descrizione del codice sorgente C# del file L2DBForm.xaml.cs. La classe parziale L2XDBForm contenuta in questo file può essere divisa in tre sezioni logiche: membri di dati e gestori degli eventi Click OnRemove e OnAddBook.
Membri di dati
Per associare questa classe alle risorse della finestra utilizzate in L2DBForm.xaml, vengono utilizzati due membri di dati privati.
La variabile dello spazio dei nomi myBooks viene inizializzata in "http://www.mybooks.com".
Il membro bookList viene inizializzato nel costruttore nella stringa CDATA in L2DBForm.xaml con la seguente riga:
bookList = (XElement)((ObjectDataProvider)Resources["LoadedBooks"]).Data;
Gestore dell'evento OnAddBook
Questo metodo contiene le tre istruzioni seguenti:
La prima istruzione condizionale viene utilizzata per la convalida dell'input.
La seconda istruzione crea un nuovo oggetto XElement dai valori stringa immessi dall'utente nella sezione Add New Book dell'interfaccia utente.
L'ultima istruzione aggiunge questo nuovo elemento libro al provider di dati in L2DBForm.xaml. Di conseguenza, l'associazione dati dinamica aggiornerà automaticamente l'interfaccia utente con questo nuovo elemento. Non è necessario altro codice specificato dall'utente.
Gestore dell'evento OnRemove
Il gestore dell'evento OnRemove è più complicato del gestore dell'evento OnAddBook, per due motivi. Innanzitutto, poiché l'XML non elaborato contiene lo spazio vuoto conservato, è necessario anche rimuovere le nuove righe corrispondente con la voce del libro. In secondo luogo, per comodità, la selezione applicata sull'elemento eliminato è stata reimpostata sull'elemento precedente nell'elenco.
Tuttavia l'operazione principale di rimozione dell'elemento libro selezionato viene effettuata con due sole istruzioni:
Innanzitutto viene recuperato l'elemento libro associato all'elemento attualmente selezionato nella casella di riepilogo.
XElement selBook = (XElement)lbBooks.SelectedItem;
Quindi questo elemento viene eliminato dal provider di dati.
selBook.Remove();
Ancora una volta, l'associazione dati dinamica assicura l'aggiornamento automatico dell'interfaccia utente del programma.
Esempio
Codice
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");
}
}
}
Commenti
Per il codice sorgente XAML associato per questi gestori, vedere Codice sorgente di L2DBForm.xaml.