Udostępnij za pośrednictwem


Kod źródłowy L2DBForm.xaml.cs

Ta strona zawiera zawartość i opis kodu źródłowego języka C# w pliku L2DBForm.xaml.cs. Klasa częściowa L2XDBForm zawarta w tym pliku może być podzielona na trzy sekcje logiczne: elementy członkowskie danych i OnRemove przycisk i OnAddBook kliknij programy obsługi zdarzeń.

Elementy członkowskie danych

Dwa prywatne składowe danych są używane do skojarzenia tej klasy z zasobami okna używanymi w pliku L2DBForm.xaml.

  • Zmienna myBooks przestrzeni nazw jest inicjowana na ."http://www.mybooks.com"

  • Element członkowski bookList jest inicjowany w konstruktorze do ciągu CDATA w L2DBForm.xaml z następującym wierszem:

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

Procedura obsługi zdarzeń OnAddBook

Ta metoda zawiera następujące trzy instrukcje:

  • Pierwsza instrukcja warunkowa jest używana do walidacji danych wejściowych.

  • Druga instrukcja tworzy nową XElement wartość na podstawie wartości ciągu wprowadzonych przez użytkownika w sekcji Dodawanie nowego interfejsu użytkownika (UI).

  • Ostatnia instrukcja dodaje ten nowy element książki do dostawcy danych w pliku L2DBForm.xaml. W związku z tym dynamiczne powiązanie danych spowoduje automatyczne zaktualizowanie interfejsu użytkownika przy użyciu tego nowego elementu; nie jest wymagany dodatkowy kod dostarczony przez użytkownika.

Procedura obsługi zdarzeń OnRemove

Procedura OnRemove obsługi jest bardziej skomplikowana OnAddBook niż procedura obsługi z dwóch powodów. Po pierwsze, ponieważ nieprzetworzone dane XML zawierają zachowane białe znaki, dopasowywanie nowych linii musi zostać również usunięte z wpisem książki. Po drugie, jako wygoda zaznaczenie, które znajdowało się w usuniętym elemencie, jest resetowane do poprzedniej na liście.

Jednak podstawowa praca usuwania wybranego elementu książki jest realizowana tylko przez dwie instrukcje:

  • Najpierw pobierany jest element książki skojarzony z aktualnie wybranym elementem w polu listy:

    XElement selBook = (XElement)lbBooks.SelectedItem;
    
  • Następnie ten element zostanie usunięty z dostawcy danych:

    selBook.Remove();
    

Ponownie dynamiczne powiązanie danych zapewnia, że interfejs użytkownika programu jest automatycznie aktualizowany.

Przykład

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

Komentarze

Aby uzyskać skojarzone źródło XAML dla tych programów obsługi, zobacz kod źródłowy L2DBForm.xaml.

Zobacz też