L2DBForm.xaml.cs codice sorgente
Questa pagina contiene il contenuto e la descrizione del codice sorgente C# nel file L2DBForm.xaml.cs. La classe parziale L2XDBForm contenuta in questo file può essere suddivisa in tre sezioni logiche: membri di dati e i gestori degli eventi click dei pulsanti OnRemove
e OnAddBook
.
Membri dati
Due membri dati privati vengono utilizzati per associare questa classe alle risorse della finestra utilizzate in L2DBForm.xaml.
La variabile dello spazio dei nomi
myBooks
viene inizializzata a"http://www.mybooks.com"
.Il membro
bookList
viene inizializzato nel costruttore alla 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 usata per la convalida dell'input.
La seconda istruzione crea una nuova XElement dai valori stringa immessi dall'utente nella sezione Aggiungi Nuovo Libro dell'interfaccia utente.
L'ultima istruzione aggiunge questo nuovo elemento book al provider di dati in L2DBForm.xaml. Di conseguenza, il data binding dinamico aggiornerà automaticamente l'interfaccia utente con questo nuovo elemento; non è necessario alcun codice aggiuntivo fornito dall'utente.
Gestore eventi OnRemove
Il gestore OnRemove
è più complesso del gestore OnAddBook
per due motivi. Innanzitutto, poiché il codice XML non elaborato contiene spazi vuoti mantenuti, è necessario rimuovere anche le nuove righe corrispondenti con la voce del libro. In secondo luogo, per praticità, la selezione, che era sull'elemento eliminato, viene reimpostata su quella precedente nell'elenco.
Tuttavia, il lavoro principale di rimozione dell'elemento libro selezionato viene eseguito solo da due istruzioni:
Innanzitutto, viene recuperato l'elemento libro associato all'elemento attualmente selezionato nella casella di elenco.
XElement selBook = (XElement)lbBooks.SelectedItem;
Questo elemento viene quindi eliminato dal provider di dati:
selBook.Remove();
Anche in questo caso, il data binding dinamico assicura che l'interfaccia utente del programma venga aggiornata automaticamente.
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 file XAML associato a questi gestori, consulta il codice sorgente L2DBForm.xaml
Vedere anche
.NET Desktop feedback