L2DBForm.xaml.cs kaynak kodu

Bu sayfa, L2DBForm. xaml. csdosyasındaki C# kaynak kodunun içeriğini ve açıklamasını içerir. Bu dosyada bulunan L2XDBForm kısmi sınıfı üç mantıksal bölüme ayrılabilir: veri üyeleri ve OnRemove ve OnAddBook düğmesi olay işleyicileri ' ne tıklayın.

Veri üyeleri

Bu sınıfı L2DBForm. xamliçinde kullanılan pencere kaynaklarıyla ilişkilendirmek için iki özel veri üyesi kullanılır.

  • Ad alanı değişkeni myBooks olarak başlatılır "http://www.mybooks.com" .

  • Üye, bookList Oluşturucu Içinde bookList içindeki CDATA dizesine aşağıdaki satırla başlatılır:

    bookList = (XElement)((ObjectDataProvider)Resources["LoadedBooks"]).Data;
    

OnAddBook olay işleyicisi

Bu yöntem, aşağıdaki üç deyimi içerir:

  • İlk koşullu ifade, giriş doğrulaması için kullanılır.

  • İkinci ifade, XElement kullanıcının XElement Kullanıcı arabirimi (UI) Ekle bölümünde girdiği dize değerlerinden yeni bir oluşturur.

  • Son ifade, bu yeni kitap öğesini L2DBForm. xamliçindeki veri sağlayıcısına ekler. Sonuç olarak, dinamik veri bağlama Kullanıcı arabirimini bu yeni öğe ile otomatik olarak güncelleştirir; Ek Kullanıcı tarafından sağlanan kod gerekmez.

OnRemove olay işleyicisi

OnRemoveİşleyici OnAddBook iki nedenden dolayı işleyiciden daha karmaşıktır. İlk olarak, Ham XML korunmuş boşluk içerdiğinden, newlines ile eşleşen bir kitap girişi de kaldırılmalıdır. İkincisi, bir kolaylık olması halinde, silinen öğede bulunan seçim, listedeki bir öncekine sıfırlanır.

Ancak, seçili kitap öğesini kaldırmanın temel çalışması yalnızca iki deyim tarafından gerçekleştirilir:

  • İlk olarak, liste kutusunda şu anda seçili olan öğeyle ilişkili kitap öğesi alınır:

    XElement selBook = (XElement)lbBooks.SelectedItem;
    
  • Ardından, bu öğe veri sağlayıcısından silinir:

    selBook.Remove();
    

Dinamik veri bağlama, programın Kullanıcı arabiriminin otomatik olarak güncelleştirilmesini sağlar.

Örnek

Kod

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");
        }
    }
}

Yorumlar

Bu işleyiciler için ilişkili XAML kaynağı için bkz . L2DBForm. xaml kaynak kodu.

Ayrıca bkz.