Çeşitli WPF bağlama modları nelerdir?


89

WPF'deki çeşitli veri bağlama modlarını anlamıyorum, örneğin:

  • Tek Yön
  • İki Yönlü
  • Bir kere
  • vb...

Bu modların her biri ne anlama geliyor?

Ne zaman kullanılmalıdır?

Yanıtlar:


162
  • OneWay: Bağlı mülkün kullanıcı arayüzünü güncellemesini istediğinizde bunu kullanın.
  • TwoWay: Bu, aynı OneWayve OneWayToSourcebirleşik davranışa sahiptir . Bağlı özellik, kullanıcı arayüzünü günceller ve kullanıcı arayüzündeki değişiklikler bağlı özelliği günceller (Bunu örneğin a TextBoxveya a ile kullanırsınız Checkbox.)
  • OneTime: Bu, OneWaykullanıcı arayüzünü yalnızca bir kez güncellemesi dışında aynı davranışa sahiptir . Bu, bağlama için varsayılan seçiminiz olmalıdır (çeşitli nedenlerden dolayı burada ayrıntılı olarak anlatmayacağım), gerçekten ekstra işlevselliğe ihtiyacınız varsa, yalnızca diğer bağlama türlerini kullanmalısınız.
  • OneWayToSource: Bu, OneWaykullanıcı arabirimindeki değer değişikliklerinin bağlı özelliği güncellemesinin tam tersidir .

Hiçbir şey belirtmezseniz, davranış, kullandığınız denetime bağlı olacaktır.

Daha fazla bilgi için BindingModeMSDN'deki numaralandırmaya bakın .


Teşekkürler. faydalıdır ... Ama plz TwoWay örneğini belirtin ... Bunun arka plan kodunu nasıl yansıttığını bilmek istiyorum.
DATT OZA

2
@DATT: "belirtin" ile neyi kastediyorsunuz? Temel olarak, XAML'de Mode = TwoWay olarak ayarlarsanız, GUI değerini değiştirdiğinizde, C # özelliğini otomatik olarak güncelleyecektir. Ancak arka plan kodundaki mülkünüzün, INotifyPropertyChanged arabirimini uygulayan bir sınıfta (ViewModel gibi) uygulanması gerekir. Arka plan kod özelliği set aracılığıyla özelliğin değerini değiştirdiğinde, GUI'nin değer değişikliğinden haberdar olması için PropertyChanged'ı çağırmanız gerekir ve otomatik olarak kendini günceller.
Dave

1
Hiçbir şey belirtmezseniz, davranış, kullandığınız MÜLK'e bağlı olacaktır.
Mauro Sampietro

39

Bir bağlama iki varlıktan oluşur:

  1. Kaynak (Tipik olarak MVVM senaryolarında ViewModel)
  2. Hedef (UI kontrolü)

Hedefin DependencyObject(çalışmak için bağlanmak için) DependencyObjectolması gerekir ve kaynak , WPF Bağlama sistemini değiştirilmesiyle ilgili olarak taklit etmek için bir mekanizmaya sahip olabilir veya bir mekanizmaya sahip olmalıdır (Uygulama INotifyPropetyChnagedarayüzü).


MVVM, ViewModel projesinin View ile ilgili herhangi bir referans içermemesini önerir ve bu nedenle INotifyPropertyChangedKaynak nesnesinin WPF bağlama tarafından duyulmasını sağlamak için arabirimin kullanılması önerilir . Bağlama, Kaynak'ın bir özelliği ile Hedef'in bir özelliği arasında gerçekleşir (a olmalıdır DependencyProperty). Örneğin TextProperty, TextBoxsınıfın The DataBound to (say) UserNameview modelinin özelliği. WPF bağlama, dört tür Bağlama sunar. Unutmayın, Binding, aksi yönde çalışmasını belirtmediğiniz sürece UI iş parçacığında çalışır.

  1. OneWay : Hedef özellik , değiştirilen kaynak mülkü dinleyecek ve kendini güncelleyecektir. ViewwModel'in UserNameözelliğini programlı olarak değiştirirseniz , metin kutusuna yansıtılır. Bağlama sistemi değişiklikler için yalnızca Kaynağı izlediği için bu orta maliyetlidir .
  2. TwoWay : Hedef özellik, değiştirilen kaynak mülkü dinleyecek ve kendini güncelleyecektir. VE Kaynak mülk, değiştirilen hedef mülkü dinleyecek ve kendini güncelleyecektir. Hem mülk TextPropertyhem de UserNameözellik senkronize kalacak ve biri değişirse birbirini güncelleyecektir. Bu, ciltleme sisteminin değişim için her iki tarafı da izlemesi gerektiğinden en maliyetlidir.
  3. OneWayToSource : Kaynak özelliği, hedef özellik değiştirilirse değişir. Kullanıcı değişirse TextProperty, UserNameözellik değiştirilen değer kadar sürecektir. Bağlama sistemi yalnızca Hedefi izlediği için bu yine orta maliyetlidir. değişiklikler için .
  4. OneTime : Bu, Binding ömrü boyunca yalnızca bir kez gerçekleşir, Target özelliği , Binding gerçekleştiğinde Source özelliği ile güncellenir . Bu, en az maliyetlidir ve gösterilecek statik verilerin olduğu senaryolar için önerilir, örneğin Label, TextBlockvb.

Hiçbir şeyden bahsetmezseniz, her hedef özelliğin kendisiyle ilişkilendirilmiş varsayılan bir bağlanma modu vardır. Örneğin TextPropertya TextBoxkadar bağlanma modu varsayılan gelmiştir TwoWay. For TextPropertyaTextBlock onu bir yoludur.

Özellikle kullanıcı arayüzünüzde çok sayıda kontrolünüz olduğu durumlarda uygulama gecikmesini azaltmanıza yardımcı olabileceğinden doğru modu seçmeniz önerilir.

MVVM hakkında daha fazla bilgi için burada benim yazdığım bir makale var.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.