Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Esta página contém o conteúdo e a descrição do código-fonte C# no arquivo L2DBForm.xaml.cs. A classe parcial L2XDBForm contida neste arquivo pode ser dividida em três seções lógicas: membros de dados, manipuladores de eventos de clique no botão OnRemove e manipuladores de eventos de clique no botão OnAddBook.
Membros de dados
Dois membros de dados privados são usados para associar essa classe aos recursos de janela usados em L2DBForm.xaml.
A variável
myBooksde namespace é inicializada para"http://www.mybooks.com".O membro
bookListé inicializado no construtor para a cadeia de caracteres CDATA em L2DBForm.xaml com a seguinte linha:bookList = (XElement)((ObjectDataProvider)Resources["LoadedBooks"]).Data;
Manipulador de eventos OnAddBook
Esse método contém as três instruções a seguir:
A primeira instrução condicional é usada para validação de entrada.
A segunda instrução cria um novo XElement com base nos valores de cadeia de caracteres que o usuário inseriu na seção de interface do usuário Adicionar Novo Livro.
A última instrução adiciona este novo elemento de livro ao provedor de dados em L2DBForm.xaml. Consequentemente, a associação dinâmica de dados atualizará automaticamente a interface do usuário com este novo item; nenhum código adicional fornecido pelo usuário é necessário.
Manipulador de evento OnRemove
O OnRemove manipulador é mais complicado do que o OnAddBook manipulador por dois motivos. Primeiro, como o XML bruto contém espaço em branco preservado, as linhas novas correspondentes também devem ser removidas com a entrada do livro. Em segundo lugar, como conveniência, a seleção, que estava no item excluído, é redefinida para a anterior na lista.
No entanto, o trabalho principal de remoção do item de livro selecionado é realizado por apenas duas instruções:
Primeiro, o elemento de livro associado ao item atualmente selecionado na caixa de listagem é recuperado:
XElement selBook = (XElement)lbBooks.SelectedItem;Em seguida, esse elemento é excluído do provedor de dados:
selBook.Remove();
Novamente, a associação dinâmica de dados garante que a interface do usuário do programa seja atualizada automaticamente.
Exemplo
Código
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");
}
}
}
Comentários
Para obter a origem XAML associada para esses manipuladores, consulte o código-fonte L2DBForm.xaml.
Consulte também
.NET Desktop feedback