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
.NET Desktop feedback