Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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, penangan peristiwa klik untuk tombol OnRemove, dan tombol OnAddBook.
Anggota data
Dua anggota data privat digunakan untuk mengaitkan kelas ini ke sumber daya jendela yang digunakan dalam L2DBForm.xaml.
Variabel
myBooksnamespace diinisialisasi ke"http://www.mybooks.com".Anggota
bookListdiinisialisasi oleh konstruktor menjadi string CDATA di L2DBForm.xaml dengan baris berikut:bookList = (XElement)((ObjectDataProvider)Resources["LoadedBooks"]).Data;
Pengendali Acara OnAddBook
Metode ini berisi tiga pernyataan berikut:
Pernyataan kondisi pertama digunakan untuk validasi input.
Pernyataan kedua membuat XElement baru dari nilai string yang dimasukkan pengguna di bagian antarmuka pengguna Tambahkan 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 sesuai juga harus dihapus dalam 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.
Lihat juga
.NET Desktop feedback