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:
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.
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.
Not
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:
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.
Bu içeriğin kaynağı GitHub'da bulunabilir; burada ayrıca sorunları ve çekme isteklerini oluşturup gözden geçirebilirsiniz. Daha fazla bilgi için katkıda bulunan kılavuzumuzu inceleyin.
.NET Desktop feedback geri bildirimi
.NET Desktop feedback, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin:
Veri bağlama ile bir kullanıcı arabirimi oluşturun. Kullanıcı arabiriminiz en son verilere göre otomatik olarak güncelleştirilirken, veriler kullanıcı arabirimindeki değişikliklere yanıt olarak güncelleştirilir.