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ı 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 .
Bir bağlama iki varlıktan oluşur:
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.
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 .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.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, 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.