L2DBForm.xaml.cs 소스 코드
이 페이지는 L2DBForm.xaml.cs 파일의 C# 소스 코드에 대한 콘텐츠와 설명이 포함되어 있습니다. 이 파일에 포함된 L2XDBForm partial 클래스는 데이터 멤버와 OnRemove
및 OnAddBook
단추 클릭 이벤트 처리기라는 세 가지 논리 섹션으로 나뉠 수 있습니다.
데이터 멤버
두 private 데이터 멤버는 이 클래스를 L2DBForm.xaml에 사용되는 창 리소스와 연결하는 데 사용됩니다.
네임스페이스 변수
myBooks
는"http://www.mybooks.com"
으로 초기화됩니다.bookList
멤버는 다음 줄을 사용하여 생성자에서 L2DBForm.xaml의 CDATA 문자열로 초기화됩니다.bookList = (XElement)((ObjectDataProvider)Resources["LoadedBooks"]).Data;
OnAddBook 이벤트 처리기
이 메서드에는 다음 세 가지 문이 포함되어 있습니다.
첫 번째 조건 문은 입력 유효성 검사에 사용됩니다.
두 번째 문은 사용자가 Add New Book UI(사용자 인터페이스) 섹션에서 입력한 문자열 값에서 새 XElement를 만듭니다.
마지막 문은 새 책 요소를 L2DBForm.xaml의 데이터 공급자에 추가합니다. 이렇게 하면 동적 데이터 바인딩을 통해 이 새 항목으로 UI가 자동으로 업데이트되므로 사용자가 추가로 코드를 제공할 필요가 없습니다.
OnRemove 이벤트 처리기
OnRemove
처리기는 두 가지 이유 때문에 OnAddBook
처리기보다 복잡합니다. 첫째로, 원시 XML에는 유지된 공백이 포함되어 있기 때문에 일치하는 줄 바꿈도 책 항목과 함께 제거되어야 합니다. 둘째로, 편리함을 위해 원하는 항목에 있던 선택 표시가 목록의 이전 항목으로 다시 설정됩니다.
그러나 선택된 책 항목을 제거하는 핵심 작업은 다음 두 명령문으로만 수행됩니다.
먼저 목록 상자에서 현재 선택된 항목과 연결된 책 요소가 검색됩니다.
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