Bagikan melalui


Kode sumber L2DBForm.xaml.cs

Halaman ini berisi konten dan deskripsi kode sumber C# dalam file L2DBForm.xaml.cs. Kelas parsial L2XDBForm yang terkandung dalam file ini dapat dibagi menjadi tiga bagian logis: anggota data dan OnRemove penangan peristiwa klik tombol dan OnAddBook .

Anggota data

Dua anggota data privat digunakan untuk mengaitkan kelas ini ke sumber daya jendela yang digunakan dalam L2DBForm.xaml.

  • Variabel myBooks namespace diinisialisasi ke "http://www.mybooks.com".

  • Anggota bookList diinisialisasi dalam konstruktor ke string CDATA di L2DBForm.xaml dengan baris berikut:

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

Penanganan aktivitas OnAddBook

Metode ini berisi tiga pernyataan berikut:

  • Pernyataan kondisi pertama digunakan untuk validasi input.

  • Pernyataan kedua membuat baru XElement dari nilai string yang dimasukkan pengguna di bagian Tambahkan antarmuka pengguna Buku Baru (UI).

  • Pernyataan terakhir menambahkan elemen buku baru ini ke penyedia data di L2DBForm.xaml. Akibatnya, pengikatan data dinamis akan secara otomatis memperbarui UI dengan item baru ini; tidak diperlukan kode tambahan yang disediakan pengguna.

Penanganan aktivitas OnRemove

Handler OnRemove lebih rumit daripada OnAddBook handler karena dua alasan. Pertama, karena XML mentah berisi ruang putih yang dipertahankan, baris baru yang cocok juga harus dihapus dengan entri buku. Kedua, sebagai kenyamanan, pilihan, yang ada pada item yang dihapus, diatur ulang ke yang sebelumnya dalam daftar.

Namun, pekerjaan inti menghapus item buku yang dipilih hanya dicapai oleh dua pernyataan:

  • Pertama, elemen buku yang terkait dengan item yang saat ini dipilih dalam kotak daftar diambil:

    XElement selBook = (XElement)lbBooks.SelectedItem;
    
  • Kemudian, elemen ini dihapus dari penyedia data:

    selBook.Remove();
    

Sekali lagi, pengikatan data dinamis memastikan bahwa UI program diperbarui secara otomatis.

Contoh

Kode

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

Komentar

Untuk sumber XAML terkait untuk handler ini, lihat kode sumber L2DBForm.xaml.

Baca juga