LINQ to XML ile WPF veri bağlamaya genel bakış

Bu makale, ad alanında System.Xml.Linq dinamik veri bağlama özelliklerini tanıtır. Bu özellikler, Windows Presentation Foundation (WPF) uygulamalarında kullanıcı arabirimi (UI) öğeleri için veri kaynağı olarak kullanılabilir. Bu senaryo, ve'nin System.Xml.Linq.XElementözel dinamik özelliklerine System.Xml.Linq.XAttribute dayanır.

XAML ve LINQ to XML

Genişletilebilir Uygulama Biçimlendirme Dili (XAML), Microsoft tarafından .NET teknolojilerini desteklemek için oluşturulan bir XML diyalekttir. WPF'de kullanıcı arabirimi öğelerini ve olaylar ve veri bağlama gibi ilgili özellikleri temsil etmek için kullanılır. Windows Workflow Foundation'da XAML, program denetimi (iş akışları) gibi program yapısını göstermek için kullanılır. XAML, bir teknolojinin bildirim temelli yönlerinin, bir programın daha bireyselleştirilmiş davranışını tanımlayan ilgili yordam kodundan ayrılmasını sağlar.

XAML ve LINQ to XML'nin etkileşim kurmanın iki geniş yolu vardır:

  • XAML dosyaları iyi biçimlendirilmiş XML olduğundan, LINQ to XML gibi XML teknolojileri aracılığıyla sorgulanabilir ve değiştirilebilir.

  • LINQ to XML sorguları bir veri kaynağını temsil ettiğinden, bu sorgular WPF UI öğeleri için veri bağlama için veri kaynağı olarak kullanılabilir.

Bu belgede ikinci senaryo açıklanmaktadır.

Windows Presentation Foundation'da veri bağlama

WPF veri bağlama, kullanıcı arabirimi öğesinin özelliklerinden birini bir veri kaynağıyla ilişkilendirmesini sağlar. Bunun basit bir örneği, metni kullanıcı tanımlı bir Label nesnede ortak özelliğin değerini sunan bir örnektir. WPF veri bağlaması aşağıdaki bileşenlere dayanır:

Bileşen Tanım
Hedef bağlama Veri kaynağıyla ilişkilendirilecek kullanıcı arabirimi öğesi. WPF'deki görsel öğeler sınıfından UIElement türetilir.
Hedef özelliği Bağlama hedefinin veri bağlama kaynağının değerini yansıtan bağımlılık özelliği. Bağımlılık özellikleri, öğesinden türetilen UIElement sınıfı tarafından DependencyObject doğrudan desteklenir.
Bağlama kaynağı Sunu için UI öğesine sağlanan bir veya daha fazla değerin kaynak nesnesi. WPF, bağlama kaynakları olarak aşağıdaki türleri otomatik olarak destekler: CLR nesneleri, ADO.NET veri nesneleri, XML verileri (XPath veya LINQ'ten XML sorgularına) veya başka bir DependencyObject.
Kaynak yol Bağlanacak değere veya değer kümesine çözümleyen bağlama kaynağının özelliği.

Bağımlılık özelliği, ui öğesinin dinamik olarak hesaplanan özelliğini temsil eden WPF'ye özgü bir kavramdır. Örneğin, bağımlılık özellikleri genellikle bir üst öğe tarafından sağlanan varsayılan değerlere veya değerlere sahiptir. Bu özel özellikler sınıfın DependencyProperty örnekleri tarafından desteklenir (standart özelliklerde olduğu gibi alanlar tarafından desteklenmez). Daha fazla bilgi için bkz . Bağımlılık Özelliklerine Genel Bakış.

WPF'de dinamik veri bağlama

Varsayılan olarak, veri bağlama yalnızca hedef ui öğesi başlatıldığında gerçekleşir. Bu, tek seferlik bağlama olarak adlandırılır. Çoğu amaçla, bu yetersizdir; genellikle veri bağlama çözümü, değişikliklerin çalışma zamanında aşağıdakilerden biri kullanılarak dinamik olarak yayılmasını gerektirir:

  • Tek yönlü bağlama, bir tarafta yapılan değişikliklerin otomatik olarak yayılmasına neden olur. En yaygın olarak, kaynakta yapılan değişiklikler hedefe yansıtılır, ancak tersi bazen yararlı olabilir.

  • İki yönlü bağlamada, kaynakta yapılan değişiklikler hedefe otomatik olarak yayılır ve hedefteki değişiklikler de kaynağa otomatik olarak yayılır.

Tek yönlü veya iki yönlü bağlamanın gerçekleşmesi için kaynağın, örneğin arabirimini uygulayarak INotifyPropertyChanged veya desteklenen her özellik için bir PropertyNameChanged deseni kullanarak bir değişiklik bildirim mekanizması uygulaması gerekir.

WPF'de veri bağlama hakkında daha fazla bilgi için bkz . Veri Bağlama (WPF).

LINQ to XML sınıflarındaki dinamik özellikler

LINQ to XML sınıflarının çoğu uygun WPF dinamik veri kaynakları olarak nitelenmez. En yararlı bilgilerden bazıları yalnızca yöntemler aracılığıyla kullanılabilir, bu sınıflardaki özellikler ve özellikler değişiklik bildirimleri uygulamaz. WPF veri bağlamasını desteklemek için LINQ to XML bir dizi dinamik özellik sunar.

Bu dinamik özellikler, ve XElement sınıflarındaki XAttribute mevcut yöntemlerin ve özelliklerin işlevselliğini çoğaltan özel çalışma zamanı özellikleridir. Bunlar yalnızca WPF için dinamik veri kaynakları olarak davranmalarını sağlamak üzere bu sınıflara eklendi. Bu gereksinimi karşılamak için tüm bu dinamik özellikler değişiklik bildirimlerini uygular. LinQ to XML Dinamik Özellikleri adlı sonraki bölümde bu dinamik özellikler için ayrıntılı bir başvuru sağlanmıştır.

Dekont

Ad alanında çeşitli sınıflarda bulunan standart ortak özelliklerin System.Xml.Linq çoğu tek seferlik veri bağlama için kullanılabilir. Ancak, kaynağın veya hedefin bu düzen altında dinamik olarak güncelleştirilmeyeceğini unutmayın.

Dinamik özelliklere erişme

ve XElement sınıflarındaki XAttribute dinamik özelliklere standart özellikler gibi erişilemez. Örneğin, C# gibi CLR uyumlu dillerde şunlar olamaz:

  • Derleme zamanında doğrudan erişilir. Dinamik özellikler derleyici ve Visual Studio IntelliSense için görünmez.

  • .NET yansımasını kullanarak çalışma zamanında bulundu veya erişildi. Çalışma zamanında bile, bunlar temel CLR açısından özellikler değildir.

C# dilinde dinamik özelliklere yalnızca çalışma zamanında ad alanı tarafından System.ComponentModel sağlanan olanaklardan erişilebilir.

Buna karşılık, bir XML kaynağında dinamik özelliklere aşağıdaki biçimde basit bir gösterimi aracılığıyla erişilebilir:

<object>.<dynamic-property>

Bu iki sınıfın dinamik özellikleri, doğrudan kullanılabilecek bir değere veya sonuçta elde edilen değeri veya değer koleksiyonunu elde etmek için dizinle birlikte sağlanması gereken bir dizin oluşturucuya çözümlenir. İkinci söz dizimi şu biçimi alır:

<object>.<dynamic-property>[<index-value>]

Daha fazla bilgi için bkz . LINQ to XML Dinamik Özellikleri.

WPF dinamik bağlamasını uygulamak için, dinamik özellikler ad alanı tarafından System.Windows.Data sağlanan olanaklarla (özellikle sınıfı) Binding kullanılır.

Ayrıca bkz.