Kaynakların Bağlanmasına Genel Bakış

Veri bağlamada bağlama kaynak nesnesi, veri aldığınız nesneye başvurur. Bu konuda, bağlama kaynağı olarak kullanabileceğiniz nesne türleri açıklanmaktadır.

Bağlama Kaynak Türleri

Windows Presentation Foundation (WPF) veri bağlaması aşağıdaki bağlama kaynak türlerini destekler:

Bağlama Kaynağı Tanım
ortak dil çalışma zamanı (CLR) nesneleri Ortak dil çalışma zamanı (CLR) nesnesinin ortak özelliklerine, alt özelliklerine ve dizin oluşturucularına bağlayabilirsiniz. Bağlama altyapısı, özelliklerin değerlerini almak için CLR yansımasını kullanır. Alternatif olarak, uygulayan ICustomTypeDescriptor veya kayıtlı TypeDescriptionProvider olan nesneler de bağlama altyapısıyla çalışır.

Bağlama kaynağı olarak hizmet veren bir sınıfı uygulama hakkında daha fazla bilgi için, bu konunun devamında yer alan Bağlama Kaynağı için Sınıf Uygulama konusuna bakın.
dinamik nesneler Arabirimi uygulayan bir nesnenin kullanılabilir özelliklerine ve dizin oluşturucularına IDynamicMetaObjectProvider bağlanabilirsiniz. Kodda üyeye erişebilirseniz, üyeye bağlanabilirsiniz. Örneğin, dinamik bir nesne aracılığıyla someObject.APropertykoddaki bir üyeye erişmenize olanak sağlıyorsa bağlama yolunu olarak ayarlayarak bu üyeye APropertybağlanabilirsiniz.
nesneleri ADO.NET gibi DataTableADO.NET nesnelere bağlanabilirsiniz. ADO.NET DataView , bağlama altyapısının IBindingList dinlediği değişiklik bildirimleri sağlayan arabirimini uygular.
XML nesneleri öğesine bağlanabilir ve bir XmlNode, XmlDocumentveya XmlElementüzerinde sorgu çalıştırabilirsinizXPath. biçimlendirmedeki bağlama kaynağı olan XML verilerine erişmenin kullanışlı bir yolu bir XmlDataProvider nesne kullanmaktır. Daha fazla bilgi için bkz . XMLDataProvider ve XPath Sorguları Kullanarak XML Verilerine Bağlama.

Ayrıca, LINQ to XML kullanarak veya XElement XDocumentöğesine bağlanabilir veya bu tür nesnelerde çalıştırılan sorguların sonuçlarına bağlanabilirsiniz. biçimlendirmedeki bağlama kaynağı olan XML verilerine erişmek için LINQ to XML kullanmanın kullanışlı bir yolu bir ObjectDataProvider nesne kullanmaktır. Daha fazla bilgi için bkz . XML Sorgu Sonuçları için XDocument, XElement veya LINQ'ye Bağlama.
DependencyObject Nesne Herhangi bir DependencyObjectöğesinin bağımlılık özelliklerine bağlanabilirsiniz. Bir örnek için bkz . İki Denetimin Özelliklerini Bağlama.

Bağlama Kaynağı için Sınıf Uygulama

Kendi bağlama kaynaklarınızı oluşturabilirsiniz. Bu bölümde, bağlama kaynağı olarak hizmet vermek üzere bir sınıf uyguluyorsanız bilmeniz gerekenler açıklanmıştır.

Değişiklik Bildirimleri Sağlama

Ya da OneWay TwoWay bağlama kullanıyorsanız (bağlama kaynağı özellikleri dinamik olarak değiştiğinde kullanıcı arabiriminizin güncelleştirilmesini istediğiniz için), uygun bir özellik değiştirilmiş bildirim mekanizması uygulamanız gerekir. Önerilen mekanizma, CLR veya dinamik sınıfın arabirimi uygulaması içindir INotifyPropertyChanged . Daha fazla bilgi için bkz . Özellik Değişikliği BildirimiNi Uygulama.

uygulamayan INotifyPropertyChangedbir CLR nesnesi oluşturursanız, bağlamada kullanılan verilerin güncel kaldığından emin olmak için kendi bildirim sisteminizi düzenlemeniz gerekir. Değişiklik bildirimlerini istediğiniz her özellik için deseni PropertyChanged destekleyerek değişiklik bildirimleri sağlayabilirsiniz. Bu düzeni desteklemek için, her özellik için propertyName Changed olayını tanımlarsınız; burada PropertyName özelliğin adıdır. Özelliği her değiştiğinde olayı tetiklersiniz.

Bağlama kaynağınız bu bildirim mekanizmalarından birini uygularsa hedef güncelleştirmeler otomatik olarak gerçekleştirilir. Herhangi bir nedenle bağlama kaynağınız uygun özellik değişikliği bildirimlerini sağlamazsa, hedef özelliği açıkça güncelleştirmek için yöntemini kullanma UpdateTarget seçeneğiniz vardır.

Diğer Özellikler

Aşağıdaki listede dikkat edilmesi gereken diğer önemli noktalar yer alıyor:

  • Nesneyi XAML'de oluşturmak istiyorsanız, sınıfın parametresiz bir oluşturucuya sahip olması gerekir. C# gibi bazı .NET dillerinde parametresiz oluşturucu sizin için oluşturulabilir.

  • Bağlama için bağlama kaynak özellikleri olarak kullandığınız özellikler, sınıfınızın genel özellikleri olmalıdır. Açıkça tanımlanmış arabirim özelliklerine bağlama amacıyla erişilemez ve temel uygulaması olmayan korumalı, özel, iç veya sanal özelliklere erişilemez.

  • Ortak alanlara bağlanamazsınız.

  • Sınıfınızda bildirilen özelliğin türü bağlamaya geçirilen türdür. Ancak, bağlama tarafından nihai olarak kullanılan tür bağlama kaynak özelliğine değil bağlama hedef özelliğinin türüne bağlıdır. Türünde bir fark varsa, özel özelliğinizin başlangıçta bağlamaya nasıl geçirildiğini işlemek için bir dönüştürücü yazmak isteyebilirsiniz. Daha fazla bilgi için bkz. IValueConverter.

Bağlama Kaynağı Olarak Tüm Nesneleri Kullanma

Nesnenin tamamını bağlama kaynağı olarak kullanabilirsiniz. veya özelliğini kullanarak Source bir bağlama kaynağı belirtebilir ve ardından boş bir bağlama bildirimi sağlayabilirsiniz: {Binding}.DataContext Bunun yararlı olduğu senaryolar arasında dize türünde olan nesnelere bağlama, ilgilendiğiniz birden çok özelliğe sahip nesnelere bağlama veya koleksiyon nesnelerine bağlama sayılabilir. Koleksiyon nesnesinin tamamına bağlama örneği için bkz . Hiyerarşik Verilerle Ana Ayrıntı Desenini Kullanma.

Verilerin ilişkili hedef özelliğiniz için anlamlı olması için özel mantık uygulamanız gerekebileceğini unutmayın. Özel mantık, özel dönüştürücü (varsayılan tür dönüştürmesi yoksa) veya biçiminde DataTemplateolabilir. Dönüştürücüler hakkında daha fazla bilgi için Veri Bağlamaya Genel Bakış'ın Veri Dönüştürme bölümüne bakın. Veri şablonları hakkında daha fazla bilgi için bkz . Veri Şablonu Oluşturmaya Genel Bakış.

Koleksiyon Nesnelerini Bağlama Kaynağı Olarak Kullanma

Genellikle, bağlama kaynağı olarak kullanmak istediğiniz nesne özel nesneler koleksiyonudur. Her nesne, yinelenen bağlamanın bir örneği için kaynak görevi görür. Örneğin, uygulamanızın CustomerOrder koleksiyon üzerinde kaç sipariş olduğunu ve her birinde yer alan verileri belirlemek için yineleme yaptığı nesnelerden oluşan bir CustomerOrders koleksiyonunuz olabilir.

IEnumerable arabirimini uygulayan herhangi bir koleksiyon üzerinde numaralandırabilirsiniz. Ancak, koleksiyondaki eklemelerin veya silmelerin kullanıcı arabirimini otomatik olarak güncelleştirmesi için dinamik bağlamalar ayarlamak üzere koleksiyonun INotifyCollectionChanged arabirimini uygulaması gerekir. Bu arabirim, temel alınan koleksiyon değiştiğinde tetiklenecek bir olayı kullanıma sunar.

ObservableCollection<T> sınıfı, arabirimini kullanıma sunan bir veri koleksiyonunun yerleşik uygulamasıdırINotifyCollectionChanged. Koleksiyondaki tek tek veri nesneleri, önceki bölümlerde açıklanan gereksinimleri karşılamalıdır. Örnek için bkz . Create and Bind to an ObservableCollection. Kendi koleksiyonunuzu uygulamadan önce, List<T>, Collection<T> ve BindingList<T> gibi mevcut koleksiyon sınıflarından birini veya ObservableCollection<T> kullanmayı göz önünde bulundurun.

WPF hiçbir zaman doğrudan bir koleksiyona bağlanmaz. Bir koleksiyonu bağlama kaynağı olarak belirtirseniz WPF aslında koleksiyonun varsayılan görünümüne bağlanır. Varsayılan görünümler hakkında bilgi için bkz . Veri Bağlamaya Genel Bakış.

Gelişmiş bir senaryonuz varsa ve kendi koleksiyonunuzu uygulamak istiyorsanız arabirimini IList kullanmayı göz önünde bulundurun. IList , performansı geliştirebilecek, dizin tarafından tek tek erişilebilen genel olmayan bir nesne koleksiyonu sağlar.

Veri Bağlamada İzin Gereksinimleri

Veri bağlama sırasında uygulamanın güven düzeyini dikkate almanız gerekir. Aşağıdaki tabloda, tam güven veya kısmi güven içinde yürütülen bir uygulamada hangi özellik türlerinin bağlanabileceği özetlenmiştir:

Özellik türü

(tüm erişim değiştiricileri)
Dinamik nesne özelliği Dinamik nesne özelliği CLR özelliği CLR özelliği Dependency özelliği Dependency özelliği
Güven düzeyi Tam güven Kısmi güven Tam güven Kısmi güven Tam güven Kısmi güven
Genel sınıf Evet Evet Evet Evet Evet Evet
Genel olmayan sınıf Evet Hayır Evet Hayır Evet Evet

Bu tabloda, veri bağlamadaki izin gereksinimleriyle ilgili aşağıdaki önemli noktalar açıklanmaktadır:

  • CLR özellikleri için, bağlama altyapısı yansıma kullanarak bağlama kaynağı özelliğine erişebildiği sürece veri bağlama çalışır. Aksi takdirde, bağlama altyapısı özelliğin bulunamadığını belirten bir uyarı verir ve varsa geri dönüş değerini veya varsayılan değeri kullanır.

  • Derleme zamanında veya çalışma zamanında tanımlanan dinamik nesnelerdeki özelliklere bağlanabilirsiniz.

  • Bağımlılık özelliklerine her zaman bağlanabilirsiniz.

XML bağlaması için izin gereksinimi benzerdir. Kısmi güven korumalı alanında, XmlDataProvider belirtilen verilere erişim izinleri olmadığında başarısız olur.

Anonim türe sahip nesneler iç nesnelerdir. Anonim türlerin özelliklerine yalnızca tam güven içinde çalışırken bağlanabilirsiniz. Anonim türler hakkında daha fazla bilgi için bkz . Anonim Türler (C# Programlama Kılavuzu) veya Anonim Türler (Visual Basic) (Visual Basic).

Kısmi güven güvenliği hakkında daha fazla bilgi için bkz . WPF Kısmi Güven Güvenliği.

Ayrıca bkz.