L2DBForm.xaml.cs källkod
Den här sidan innehåller innehållet och beskrivningen av C#-källkoden i filen L2DBForm.xaml.cs. Den partiella L2XDBForm-klassen i den här filen kan delas in i tre logiska avsnitt: datamedlemmar och händelsehanterare för knapptryckningar för knapparna OnRemove
och OnAddBook
.
Datamedlemmar
Två privata datamedlemmar används för att associera den här klassen med de fönsterresurser som används i L2DBForm.xaml.
Namnområdesvariabeln
myBooks
initieras till"http://www.mybooks.com"
.Medlemmen
bookList
initieras i konstruktorn till CDATA-strängen i L2DBForm.xaml med följande rad:bookList = (XElement)((ObjectDataProvider)Resources["LoadedBooks"]).Data;
OnAddBook-händelsehanterare
Den här metoden innehåller följande tre instruktioner:
Den första villkorssatsen används för indataverifiering.
Den andra instruktionen skapar en ny XElement från strängvärdena som användaren angav i avsnittet Lägg till ny bok användargränssnitt(UI).
Den sista satsen lägger till detta nya bokelement till dataprovidern i L2DBForm.xaml. Därför uppdaterar dynamisk databindning automatiskt användargränssnittet med det här nya objektet. ingen extra kod från användaren krävs.
OnRemove-händelsehanterare
OnRemove
-hanteraren är mer komplicerad än OnAddBook
-hanteraren av två skäl. För det första, eftersom den råa XML-koden innehåller bevarat tomt utrymme, måste matchande nya raderna också tas bort med bokposten. För det andra, som en bekvämlighet, återställs markeringen, som fanns i det borttagna objektet, till den tidigare i listan.
Kärnarbetet med att ta bort det valda bokobjektet utförs dock endast med två instruktioner:
Först hämtas bokelementet som är associerat med det markerade objektet i listrutan:
XElement selBook = (XElement)lbBooks.SelectedItem;
Sedan tas det här elementet bort från dataprovidern:
selBook.Remove();
Dynamisk databindning säkerställer återigen att programmets användargränssnitt uppdateras automatiskt.
Exempel
Kod
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");
}
}
}
Kommentarer
Den associerade XAML-källan för dessa hanterare finns i L2DBForm.xaml-källkod.
Se även
.NET Desktop feedback