Bağlama kaynaklarına genel bakış (WPF .NET)
Veri bağlamada bağlama kaynak nesnesi, verileri aldığınız nesneye başvurur. Bu makalede, .NET CLR nesneleri, XML ve nesneleri gibi bağlama kaynağı olarak kullanabileceğiniz nesne türleri ele alınmaktadır DependencyObject .
Bağlama kaynak türleri
Windows Presentation Foundation (WPF) veri bağlama, aşağıdaki bağlama kaynak türlerini destekler:
.NET ortak dil çalışma zamanı (CLR) nesneleri
Ortak özellikler, alt özellikler ve herhangi bir ortak dil çalışma zamanı (CLR) nesnesinin dizin oluşturucularının bağlama yapabilirsiniz. Bağlama altyapısı, özelliklerin değerlerini almak için CLR Reflection kullanır. Uygulayan veya içeren nesneler ICustomTypeDescriptorTypeDescriptionProvider , bağlama altyapısı ile de çalışır.
Bağlama kaynağı olarak kullanılabilecek bir sınıfın nasıl uygulanacağı hakkında daha fazla bilgi için, bu makalenin ilerleyen kısımlarında yer alan nesnelerinizin bağlama kaynağını uygulama bölümüne bakın.
Dinamik nesneler
Arabirim uygulayan bir nesnenin kullanılabilir özelliklerine ve dizin oluşturucularının bağlama yapabilirsiniz IDynamicMetaObjectProvider . Kodda üyeye erişebilmek için bağlayabilirsiniz. Örneğin, dinamik bir nesne koddaki bir üyeye aracılığıyla erişmenizi sağlar
someObjet.AProperty, bağlama yolunu ayarlayarak buna bağlanabilirsinizAProperty.ADO.NET nesneleri
gibi ADO.NET nesnelerine bağlayabilirsiniz DataTable . ADO.NET, DataViewIBindingList bağlama altyapısının dinlediği değişiklik bildirimleri sağlayan arabirimini uygular.
XML nesneleri
, Veya ' de sorguları bağlanabilir ve
XPathüzerinde sorgu XmlNode çalıştırabilirsiniz XmlDocumentXmlElement . Biçimlendirme içindeki bağlama kaynağı olan XML verilerine erişmenin kolay bir yolu bir XmlDataProvider nesne kullanmaktır. Daha fazla bilgi için bkz. XMLDataProvider ve XPath sorguları kullanarak XML verilerine bağlama (.NET Framework).Ayrıca XElement , bir veya ' a bağlanabilir XDocument veya LINQ to XML kullanarak bu türlerin nesnelerinde çalıştırılan sorguların sonuçlarına bağlayabilirsiniz. biçimlendirme içindeki bağlama kaynağı olan XML verilerine erişmek için LINQ to XML kullanmanın kolay bir yolu bir ObjectDataProvider nesne kullanmaktır. Daha fazla bilgi için bkz. XML sorgu sonuçları Için XDocument, XElement veya LINQ 'A bağlama (.NET Framework).
nesneyi
Herhangi birinin bağımlılık özelliklerine bağlanabilirsiniz DependencyObject . Bir örnek için bkz. Iki denetimin özelliklerini bağlama (.NET Framework).
Nesneleriniz üzerinde bir bağlama kaynağı uygulama
CLR nesneleriniz, bağlama kaynakları haline gelebilir. Bağlama kaynağı olarak kullanılacak bir sınıfı uygularken dikkat etmeniz gereken birkaç nokta vardır.
Değişiklik bildirimleri sağla
OneWayYa da TwoWay bağlamayı kullanıyorsanız uygun bir "özellik değiştirildi" bildirim mekanizması uygulayın. Önerilen mekanizma, CLR veya dinamik sınıfın arabirimini uygulaması içindir INotifyPropertyChanged . Daha fazla bilgi için bkz. nasıl yapılır: özellik değişikliği bildirimi uygulama (.NET Framework).
Bir özellik değişikliğinin abonesine bildirimde bulunmanın iki yolu vardır:
INotifyPropertyChanged arabirimini gerçekleştirin.
Bu, bildirimler için önerilen mekanizmadır. , INotifyPropertyChangedPropertyChanged Bağlama sisteminin sahip olduğu olayı sağlar. Bu olayı yükselterek ve değiştirilen özelliğin adını sağlayarak değişikliğin bağlama hedefini bilgilendirirsiniz.
Stili uygulayın
PropertyChanged.Bir bağlama hedefini değiştiği her bir özellik, karşılık gelen bir
PropertyNameChangedolaya sahiptir, buradaPropertyNameözelliğin adıdır. Olay, özellik her değiştiğinde tetiklenir.
Bağlama kaynağınız bu bildirim mekanizmalarından birini uygularsa, hedef güncelleştirmeler otomatik olarak gerçekleşir. Herhangi bir nedenden dolayı bağlama kaynağınız uygun özellik değiştirme bildirimlerini sağlamadığı takdirde, UpdateTarget hedef özelliği açıkça güncelleştirmek için yöntemini kullanabilirsiniz.
Diğer özellikler
Aşağıdaki listede dikkat edilecek diğer önemli noktaları verilmiştir:
Bağlama kaynakları olarak görev yapan veri nesneleri XAML 'de, parametresiz bir oluşturucuyasahip olmaları şartıyla, kaynak olarak bildirilebilecek. Aksi halde, veri nesnesini kodda oluşturmanız ve doğrudan XAML nesne ağacınızın veri bağlamına ya da bağlama kaynağı olarak atamanız gerekir.
Bağlama kaynak özellikleri olarak kullandığınız özellikler, sınıfınızın ortak özellikleri olmalıdır. Açıkça tanımlanmış arabirim özelliklerine bağlama amacıyla erişilemez, ya da hiçbir temel uygulama içermeyen korumalı, özel, iç veya sanal özellikler olabilir.
Ortak alanlara bağlayamazsınız.
Sınıfınıza göre belirtilen özelliğin türü, bağlamaya geçirilen türdür. Ancak, son olarak bağlama tarafından kullanılan tür bağlama kaynak özelliği değil, bağlama hedefi özelliğinin türüne bağlıdır. Türünde bir fark varsa, özel özelliğinin ilk olarak bağlamaya nasıl geçtiğini işlemek için bir dönüştürücü yazmak isteyebilirsiniz. Daha fazla bilgi için bkz. IValueConverter.
Tüm nesneler bağlama kaynağı olarak
Tüm nesneyi bağlama kaynağı olarak kullanabilirsiniz. Veya özelliğini kullanarak bir bağlama kaynağı belirtin SourceDataContext ve boş bir bağlama bildirimi sağlayın: {Binding} . Bunun yararlı olduğu senaryolar, tür String olan nesnelere bağlamayı, ilgilendiğiniz birden fazla özelliğe sahip nesnelere bağlamayı veya koleksiyon nesnelerine bağlamayı içerir. Tüm koleksiyon nesnesine bağlama örneği için bkz. Master-Detail modelini hiyerarşik verilerle kullanma (.NET Framework).
Verilerin, bağlantılı hedef özelliği için anlamlı olması için özel mantık uygulamanız gerekebilir. Özel mantık özel bir dönüştürücü veya bir biçiminde olabilir DataTemplate . Dönüştürücüler hakkında daha fazla bilgi için bkz. veri dönüştürme. Veri şablonları hakkında daha fazla bilgi için bkz. veri şablonu genel bakış (.NET Framework).
Bağlama kaynağı olarak koleksiyon nesneleri
Genellikle, bağlama kaynağı olarak kullanmak istediğiniz nesne bir özel nesneler koleksiyonudur. Her nesne, yinelenen bir bağlamanın bir örneğinin kaynağı olarak görev yapar. Örneğin, CustomerOrdersCustomerOrder uygulamanızın, kaç siparişin mevcut olduğunu ve her bir sırada yer alan verileri öğrenmek için koleksiyon üzerinde yineleme yapan nesnelerden oluşan bir koleksiyonunuz olabilir.
Arabirimini uygulayan herhangi bir koleksiyonun üzerinde listeleme yapabilirsiniz IEnumerable . Bununla birlikte, koleksiyondaki eklemelerin veya silinmelerin Kullanıcı arabirimini otomatik olarak güncelleştirmeleri için dinamik bağlamaları ayarlamak için koleksiyonun arabirimini uygulaması gerekir INotifyCollectionChanged . Bu arabirim, temeldeki koleksiyon değiştiğinde oluşturulması gereken bir olay gösterir.
ObservableCollection<T>Sınıfı, arabirimi kullanıma sunan bir veri koleksiyonunun yerleşik bir uygulamasıdır INotifyCollectionChanged . Koleksiyon içindeki bireysel veri nesneleri, önceki bölümlerde açıklanan gereksinimleri karşılamalıdır. Bir örnek için bkz. ObservableCollection (.NET Framework) oluşturma ve bağlama. Kendi koleksiyonunuzu uygulamadan önce,, ObservableCollection<T> ve gibi var olan koleksiyon sınıflarından birini ya da List<T>Collection<T>BindingList<T> diğer birçok diğer arasında kullanmayı düşünün.
Bir koleksiyonu bağlama kaynağı olarak belirttiğinizde, WPF doğrudan koleksiyona bağlamayın. Bunun yerine WPF aslında koleksiyonun varsayılan görünümüne bağlanır. Varsayılan görünümler hakkında daha fazla bilgi için bkz. varsayılan görünüm kullanma.
Gelişmiş bir senaryonuz varsa ve kendi koleksiyonunuzu uygulamak istiyorsanız, arabirimini kullanmayı göz önünde bulundurun IList . Bu arabirim, dizin tarafından ayrı ayrı erişilebilen nesnelerin genel olmayan bir koleksiyonunu sağlar ve bu da performansı iyileştirebilir.
Veri bağlamada izin gereksinimleri
.NET Framework aksine, .net 5 + (ve .net Core 3,1) tam güven güvenliği ile çalışır. Tüm veri bağlama, uygulamayı çalıştıran kullanıcıyla aynı erişimle çalışır.