L2DBForm.xaml.csのソースコード
このページには、L2DBForm.xaml.csファイル内の C# ソース コードの内容と説明が含まれています。 このファイルに含まれる L2XDBForm 部分クラスは、データ メンバーと OnRemove
と OnAddBook
ボタン クリック イベント ハンドラーの 3 つの論理セクションに分割できます。
データ メンバー
このクラスを、L2DBForm.xamlで使用されるウィンドウ リソースに関連付けるために、2 つのプライベート データ メンバーが使用されます。
myBooks
名前空間変数は、"http://www.mybooks.com"
に初期化されます。コンストラクターにおいて、次の行で
メンバーは L2DBForm.xaml 内の CDATA 文字列に初期化されます。 bookList = (XElement)((ObjectDataProvider)Resources["LoadedBooks"]).Data;
OnAddBook イベント ハンドラー
このメソッドには、次の 3 つのステートメントが含まれています。
最初の条件ステートメントは、入力の検証に使用されます。
2 番目のステートメントでは、ユーザーが 「Add New Book user interface (UI)」セクションに入力した文字列値から新しい XElement を作成します。
最後のステートメントでは、この新しい book 要素を L2DBForm.xamlのデータ プロバイダーに追加します。 その結果、動的データ バインディングは、この新しい項目で UI を自動的に更新します。追加のユーザー指定コードは必要ありません。
OnRemove イベント ハンドラー
OnRemove
ハンドラーは、2 つの理由から、OnAddBook
ハンドラーよりも複雑です。 1 つは、生の XML に保持された空白が含まれているために、一致する改行を書籍エントリと共に削除する必要があることです。 2 つ目は、便宜上、削除済みアイテムにあった選択範囲が、リスト内の前の項目にリセットされます。
ただし、選択した書籍アイテムを削除する主要な作業は、次の 2 つのステートメントによってのみ実行されます。
まず、リスト ボックスで現在選択されている項目に関連付けられている book 要素が取得されます。
XElement selBook = (XElement)lbBooks.SelectedItem;
その後、この要素はデータ プロバイダーから削除されます。
selBook.Remove();
繰り返しになりますが、動的データ バインディングにより、プログラムの UI が自動的に更新されます。
例
コード
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");
}
}
}
コメント
これらのハンドラーに関連付けられている XAML ソースについては、L2DBForm.xaml ソース コードを参照してください。
関連項目
.NET Desktop feedback