LINQ to XML ile WPF veri bağlamaya genel bakış
Bu makalede, ad alanındaki dinamik veri bağlama özellikleri tanıtılmaktadır System.Xml.Linq . bu özellikler, Windows Presentation Foundation (WPF) uygulamalarındaki kullanıcı arabirimi (uı) öğeleri için bir veri kaynağı olarak kullanılabilir. Bu senaryo, ve ' nin özel dinamik özelliklerine bağımlıdır System.Xml.Linq.XElement .
XAML ve LINQ to XML
Extensible Application Markup Language (XAML), .NET teknolojilerini desteklemek için Microsoft tarafından oluşturulan bir XML lehçileridir. Kullanıcı arabirimi öğelerini ve olaylar ve veri bağlama gibi ilgili özellikleri temsil etmek için WPF 'de kullanılır. Windows Workflow Foundation, XAML program denetimi (iş akışları) gibi program yapısını temsil etmek için kullanılır. XAML, bir teknolojinin bildirim temelli yönlerinin bir programın daha kişiselleştirilmiş davranışını tanımlayan ilgili yordamsal koddan ayrılmasını sağlar.
XAML ve LINQ to XML etkileşime girebileceği iki geniş yol vardır:
XAML dosyaları iyi biçimlendirilmiş XML olduğundan, LINQ to XML gibi XML teknolojileri aracılığıyla sorgulanabilir ve işlenebilir.
LINQ to XML sorguları bir veri kaynağını temsil ettiğinden, bu sorgular WPF kullanıcı arabirimi öğeleri için veri bağlama için bir veri kaynağı olarak kullanılabilir.
Bu belgede İkinci senaryo açıklanmaktadır.
Windows Presentation Foundation veri bağlama
WPF veri bağlama, bir kullanıcı arabirimi öğesinin özelliklerinden birini bir veri kaynağıyla ilişkilendirebilmesine olanak sağlar. Bunun basit bir örneği, Label metni Kullanıcı tanımlı bir nesne içindeki bir ortak özelliğin değerini gösterir. WPF veri bağlama, aşağıdaki bileşenlere bağımlıdır:
| Bileşen | Açıklama |
|---|---|
| Bağlama hedefi | Veri kaynağıyla ilişkilendirilecek Kullanıcı arabirimi öğesi. WPF 'deki görsel öğeler UIElement sınıfından türetilir. |
| Target özelliği | Veri bağlama kaynağının değerini yansıtan bağlama hedefinin bağımlılık özelliği . Bağımlılık özellikleri, sınıfından türetilen sınıfı tarafından doğrudan desteklenir DependencyObjectUIElement . |
| Bağlama kaynağı | Sunum için Kullanıcı arabirimi öğesine sağlanan bir veya daha fazla değer için kaynak nesne. WPF, bağlama kaynakları olarak şu türleri otomatik olarak destekler: CLR nesneleri, ADO.NET veri nesneleri, XML verileri (XPath veya LINQ to XML sorgularından) veya başka bir DependencyObject . |
| Kaynak yol | Bağlanacak olan bağlama kaynağının özelliği veya bağlanacak değer kümesi. |
Bağımlılık özelliği, bir UI öğesinin dinamik olarak hesaplanan özelliğini temsil eden WPF 'e özgü bir kavramdır. Örneğin, bağımlılık özellikleri genellikle bir üst öğe tarafından belirtilen varsayılan değerlere veya değerlere sahiptir. Bu özel özellikler, sınıfının örnekleri tarafından desteklenir DependencyProperty (standart özelliklerle birlikte alanlar değildir). 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 yeterli değildir; Genellikle, bir veri bağlama çözümü, aşağıdakilerden biri kullanılarak değişikliklerin çalışma zamanında dinamik olarak yayılmasını gerektirir:
Tek yönlü bağlama, değişikliklerin bir yandan otomatik olarak yayılmasına neden olur. En yaygın olarak, kaynakta yapılan değişiklikler hedefte yansıtılır, ancak ters işlem bazen yararlı olabilir.
İki yönlü bağlamada, kaynakta yapılan değişiklikler otomatik olarak hedefe yayılır ve hedefteki değişiklikler otomatik olarak kaynağa dağıtılır.
Tek yönlü veya iki yönlü bağlamanın gerçekleşmesi için, kaynağın bir değişiklik bildirim mekanizması uygulaması gerekir, örneğin INotifyPropertyChanged arabirimini uygulayarak veya desteklenen her özellik için bir INotifyPropertyChanged model kullanarak.
WPF 'de veri bağlama hakkında daha fazla bilgi için bkz. veri bağlama (WPF).
LINQ to XML sınıflarında dinamik özellikler
çoğu LINQ to XML sınıf uygun WPF dinamik veri kaynakları olarak niteler. En yararlı bilgilerden bazıları yalnızca yöntemler aracılığıyla kullanılabilir, ancak bu sınıflarda Özellikler değişiklik bildirimlerini uygulamaz. WPF veri bağlamayı desteklemek için LINQ to XML, bir dizi dinamik özellikkullanıma sunar.
Bu dinamik özellikler, ve sınıflarında mevcut yöntemlerin ve özelliklerin işlevselliğini yineleyen özel çalışma zamanı özellikleridir XAttributeXElement . Bunlar bu sınıflara yalnızca WPF için dinamik veri kaynakları görevi görmesini sağlamak için eklenmiştir. Bu gereksinimi karşılamak için, tüm bu dinamik özellikler değişiklik bildirimlerini uygular. bu dinamik özelliklere yönelik ayrıntılı bir başvuru, bir sonraki bölümde verilmiştir LINQ to XML dinamik özellikler.
Not
Ad alanındaki çeşitli sınıflarda bulunan standart ortak özelliklerin birçoğu System.Xml.Linq , tek seferlik veri bağlama için kullanılabilir. Ancak, ne kaynak ne de hedefin bu şema altında dinamik olarak güncelleştirileceğini unutmayın.
Erişim dinamik özellikleri
XAttributeVe XElement sınıflardaki dinamik özelliklere standart özellikler gibi erişilemez. Örneğin, C# gibi CLR uyumlu dillerde şu olamaz:
Doğrudan derleme zamanında erişilir. dinamik özellikler, derleyicide ve ıntellisense Visual Studio görünmez.
.NET Reflection kullanılarak çalışma zamanında keşfedildi veya erişilir. Çalışma zamanında bile, temel CLR Sense içinde Özellikler değildir.
C# dilinde, dinamik özelliklere yalnızca ad alanı tarafından sunulan tesislerde çalışma zamanında erişilebilir System.ComponentModel .
Buna karşılık, bir XML kaynak dinamik özelliklerine aşağıdaki biçimde doğrudan bir gösterim aracılığıyla erişilebilir:
<object>.<dynamic-property>
Bu iki sınıf için dinamik özellikler, doğrudan kullanılabilecek bir değere çözümlenmez ya da sonuç değerini ya da değerleri toplamayı elde etmek için bir dizinle birlikte sağlanması gereken bir dizin oluşturucudur. İkinci sözdizimi şu biçimdedir:
<object>.<dynamic-property>[<index-value>]
daha fazla bilgi için bkz. dinamik özellikler LINQ to XML.
WPF dinamik bağlamayı uygulamak için dinamik özellikler, ad alanı tarafından sunulan tesislerle birlikte kullanılacaktır System.Windows.Data , bu da özellikle Binding sınıfı.