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:

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:

  1. 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.

  2. Stili uygulayın PropertyChanged .

    Bir bağlama hedefini değiştiği her bir özellik, karşılık gelen bir PropertyNameChanged olaya sahiptir, burada PropertyName ö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.

Ayrıca bkz.