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:
OneWay
: Bağlı mülkün kullanıcı arayüzünü güncellemesini istediğinizde bunu kullanın.TwoWay
: Bu, aynı OneWay
ve OneWayToSource
birleş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 TextBox
veya a ile kullanırsınız Checkbox
.)OneTime
: Bu, OneWay
kullanı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, OneWay
kullanı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 BindingMode
MSDN'deki numaralandırmaya bakın .
Bir bağlama iki varlıktan oluşur:
Hedefin DependencyObject
(çalışmak için bağlanmak için) DependencyObject
olması 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 INotifyPropetyChnaged
arayüzü).
MVVM, ViewModel projesinin View ile ilgili herhangi bir referans içermemesini önerir ve bu nedenle INotifyPropertyChanged
Kaynak 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
, TextBox
sınıfın The DataBound to (say) UserName
view 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.
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 .TextProperty
hem 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.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 .Label
, TextBlock
vb.Hiçbir şeyden bahsetmezseniz, her hedef özelliğin kendisiyle ilişkilendirilmiş varsayılan bir bağlanma modu vardır. Örneğin TextProperty
a TextBox
kadar bağlanma modu varsayılan gelmiştir TwoWay
. For TextProperty
aTextBlock
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.