Bağlama kaynakları nedir? (WPF .NET)
Veri bağlamada bağlama kaynak nesnesi, veri aldığınız nesneye başvurur. Bu makalede, .NET CLR nesneleri, XML ve DependencyObject nesneler gibi bağlama kaynağı olarak kullanabileceğiniz nesne türleri açıklanır.
Kaynak türlerini bağlama
Windows Presentation Foundation (WPF) veri bağlaması aşağıdaki bağlama kaynak türlerini destekler:
.NET ortak dil çalışma zamanı (CLR) nesneleri
Herhangi bir ortak dil çalışma zamanı (CLR) nesnesinin ortak özelliklerine, alt özelliklerine ve dizin oluşturucularına bağlanabilirsiniz. Bağlama altyapısı, özelliklerin değerlerini almak için CLR yansımasını kullanır. Uygulayan ICustomTypeDescriptor veya kayıtlı TypeDescriptionProvider olan nesneler de bağlama altyapısıyla çalışır.
Bağlama kaynağı olarak görev yapabilecek bir sınıfı uygulama hakkında daha fazla bilgi için, bu makalenin devamında nesnelerinize bağlama kaynağı 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.AProperty
koddaki bir üyeye erişmenize olanak sağlıyorsa bağlama yolunu olarak ayarlayarak bu üyeyeAProperty
bağ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ırabilirsiniz
XPath
. 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ı (.NET Framework) 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ı (.NET Framework) 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 (.NET Framework).
Nesnelerinize bağlama kaynağı uygulama
CLR nesneleriniz bağlama kaynaklarına dönüşebilir. Bağlama kaynağı görevi görecek bir sınıf uygulanırken dikkat edilmesi gereken birkaç şey vardır.
Değişiklik bildirimleri sağlama
veya TwoWay bağlama kullanıyorsanızOneWay, uygun bir "özellik değiştirildi" bildirim mekanizması uygulayın. Önerilen mekanizma, CLR veya dinamik sınıfın arabirimi uygulaması içindir INotifyPropertyChanged . Daha fazla bilgi için bkz . Nasıl yapılır: Özellik Değişiklik Bildirimi Uygulama (.NET Framework).
Bir özellik değişikliğini aboneye bildirmenin iki yolu vardır:
INotifyPropertyChanged arabirimini gerçekleştirin.
Bu, bildirimler için önerilen mekanizmadır. bağlama INotifyPropertyChanged sisteminin dikkate PropertyChanged aldığı olayı sağlar. Bu olayı oluşturarak ve değiştirilen özelliğin adını sağlayarak, değişikliğin bağlama hedefini bilgilendirirsiniz.
Deseni
PropertyChanged
uygulayın.Bir bağlama hedefine değiştirildiğini bildirmesi gereken her özelliğin, özelliğin adı olan
PropertyName
ilgiliPropertyNameChanged
bir olayı vardı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 kullanabilirsiniz UpdateTarget .
Diğer özellikler
Aşağıdaki listede dikkat edilmesi gereken diğer önemli noktalar yer alıyor:
Bağlama kaynakları olarak hizmet veren veri nesneleri, parametresiz bir oluşturucuya sahip olmaları koşuluyla XAML'de kaynak olarak bildirilebilir. Aksi takdirde, veri nesnesini kodda oluşturmanız ve doğrudan XAML nesne ağacınızın veri bağlamı veya bağlama kaynağı olarak atamanız gerekir.
Bağlama kaynağı ö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şilemiyor veya temel uygulaması olmayan korumalı, özel, iç veya sanal özelliklere erişilemiyor.
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 nesnelerin tamamı
Nesnenin tamamını bağlama kaynağı olarak kullanabilirsiniz. veya özelliğini kullanarak Source bir bağlama kaynağı belirtin ve ardından boş bir bağlama bildirimi sağlayın: {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 (.NET Framework).
Verilerin ilişkili hedef özelliğinize yönelik anlamlı olması için özel mantık uygulamanız gerekebilir. Özel mantık, özel dönüştürücü veya DataTemplatebiçiminde olabilir. 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 Oluşturmaya Genel Bakış (.NET Framework).
Bağlama kaynağı olarak koleksiyon nesneleri
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 kaç siparişin CustomerOrder
var olduğunu ve her sırada yer alan verileri belirlemek için koleksiyon üzerinde yinelendiği 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. Bir örnek için bkz . How to Create and Bind to a ObservableCollection (.NET Framework). Kendi koleksiyonunuzu uygulamadan önce , ve BindingList<T>gibi List<T>Collection<T>mevcut koleksiyon sınıflarından birini kullanmayı ObservableCollection<T> göz önünde bulundurun.
Bir koleksiyonu bağlama kaynağı olarak belirttiğinizde WPF doğrudan koleksiyona bağlanmaz. Bunun yerine 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 . Varsayılan görünümü kullanma.
Gelişmiş bir senaryonuz varsa ve kendi koleksiyonunuzu uygulamak istiyorsanız arabirimini IList kullanmayı göz önünde bulundurun. Bu arabirim, dizin tarafından tek tek erişilebilen ve performansı geliştirebilen genel olmayan bir nesne koleksiyonu sağlar.
Veri bağlamada izin gereksinimleri
.NET Framework'ün aksine. .NET tam güven güvenliğiyle çalışır. Tüm veri bağlama, uygulamayı çalıştıran kullanıcıyla aynı erişimle çalışır.
Ayrıca bkz.
.NET Desktop feedback