Bağlama Bildirimlerine Genel Bakış
Bu konuda, bağlama bildirebileceğiniz farklı yollar açıklanmaktadır.
Önkoşullar
Bu konuyu okumadan önce, işaretleme uzantılarının kavramı ve kullanımı hakkında bilgi sahibi olmanız önemlidir. biçimlendirme uzantıları hakkında daha fazla bilgi için bkz . İşaretlemeyi Genişletmeler ve WPF XAML.
Bu konu, veri bağlama kavramlarını kapsamaz. Veri bağlama kavramlarıyla ilgili bir tartışma için bkz . Veri Bağlamaya Genel Bakış.
XAML'de Bağlama Bildirme
Bu bölümde XAML'de bağlama bildirme işlemi açıklanır.
İşaretlemeyi Genişletme Kullanımı
Binding bir işaretleme uzantısıdır. Bağlama uzantısını kullanarak bir bağlama bildirdiğinizde, bildirim anahtar sözcüğünü izleyen Binding
ve virgülle (,) ayrılmış bir dizi yan tümceden oluşur. Bağlama bildirimindeki yan tümceler herhangi bir sırada olabilir ve birçok olası birleşim vardır. Yan tümceleri, Name=özelliğinin Binding adı, Value ise özelliği için ayarladığınız değer olan Ad Değer çiftleridir.
İşaretlemede bağlama bildirimi dizeleri oluştururken, bunların hedef nesnenin belirli bağımlılık özelliğine eklenmesi gerekir. Aşağıdaki örnek, ve Path özelliklerini belirterek bağlama uzantısını kullanarak özelliğin Source nasıl bağlanacağını TextBox.Text gösterir.
<TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=PersonName}"/>
Sınıfın özelliklerinin Binding çoğunu bu şekilde belirtebilirsiniz. Bağlama uzantısı hakkında daha fazla bilgi ve bağlama uzantısı kullanılarak ayarlanamayan özelliklerin Binding listesi için bkz. Bağlama İşaretleme Uzantısına genel bakış.
Nesne Öğesi Söz Dizimi
Nesne öğesi söz dizimi, bağlama bildirimi oluşturmaya alternatiftir. Çoğu durumda, işaretleme uzantısını veya nesne öğesi söz dizimini kullanmanın belirli bir avantajı yoktur. Ancak, özellik değeriniz tür dönüştürmesi olmayan bir dize türünde olduğunda, işaretleme uzantısının senaryonuzu desteklemediği durumlarda nesne öğesi söz dizimini kullanmanız gerekir.
Aşağıda hem nesne öğesi söz dizimi hem de işaretleme uzantısı kullanımı örneği verilmiştir:
<TextBlock Name="myconvertedtext"
Foreground="{Binding Path=TheDate,
Converter={StaticResource MyConverterReference}}">
<TextBlock.Text>
<Binding Path="TheDate"
Converter="{StaticResource MyConverterReference}"/>
</TextBlock.Text>
</TextBlock>
Örnek, uzantı söz dizimini Foreground kullanarak bağlama bildirerek özelliğini bağlar. özelliği için Text bağlama bildirimi, nesne öğesi söz dizimini kullanır.
Farklı terimler hakkında daha fazla bilgi için bkz . Ayrıntılı XAML Söz Dizimi.
MultiBinding ve PriorityBinding
MultiBinding ve PriorityBinding XAML uzantısı söz dizimini desteklemez. Bu nedenle, XAML'de bir MultiBinding veya PriorityBinding bildiriyorsanız nesne öğesi söz dizimini kullanmanız gerekir.
Kodda Bağlama Oluşturma
Bağlama belirtmenin bir diğer yolu da özellikleri doğrudan koddaki bir Binding nesne üzerinde ayarlamaktır. Aşağıdaki örnekte, bir Binding nesnenin nasıl oluşturulacağı ve koddaki özelliklerin nasıl belirtileceğini gösterilmektedir. Bu örnekte, TheConverter
arabirimini uygulayan IValueConverter bir nesnedir.
private void OnPageLoaded(object sender, EventArgs e)
{
// Make a new source, to grab a new timestamp
MyData myChangedData = new MyData();
// Create a new binding
// TheDate is a property of type DateTime on MyData class
Binding myNewBindDef = new Binding("TheDate");
myNewBindDef.Mode = BindingMode.OneWay;
myNewBindDef.Source = myChangedData;
myNewBindDef.Converter = TheConverter;
myNewBindDef.ConverterCulture = new CultureInfo("en-US");
// myDatetext is a TextBlock object that is the binding target object
BindingOperations.SetBinding(myDateText, TextBlock.TextProperty, myNewBindDef);
BindingOperations.SetBinding(myDateText, TextBlock.ForegroundProperty, myNewBindDef);
lbChooseCulture.SelectedIndex = 0;
}
Private Sub OnPageLoaded(ByVal sender As Object, ByVal e As EventArgs)
' Make a new source, to grab a new timestamp
Dim myChangedData As New MyData()
' Create a new binding
' TheDate is a property of type DateTime on MyData class
Dim myNewBindDef As New Binding("TheDate")
myNewBindDef.Mode = BindingMode.OneWay
myNewBindDef.Source = myChangedData
myNewBindDef.Converter = TheConverter
myNewBindDef.ConverterCulture = New CultureInfo("en-US")
' myDatetext is a TextBlock object that is the binding target object
BindingOperations.SetBinding(myDateText, TextBlock.TextProperty, myNewBindDef)
BindingOperations.SetBinding(myDateText, TextBlock.ForegroundProperty, myNewBindDef)
lbChooseCulture.SelectedIndex = 0
End Sub
Bağladığınız nesne bir FrameworkElement veya FrameworkContentElement ise, yöntemini kullanmak BindingOperations.SetBindingyerine doğrudan nesnenizde çağırabilirsinizSetBinding
. Bir örnek için bkz . Kodda Bağlama Oluşturma.
Bağlama Yolu Söz Dizimi
Path Bağlamak istediğiniz kaynak değeri belirtmek için özelliğini kullanın:
En basit durumda, Path özellik değeri bağlama için kullanılacak kaynak nesnenin özelliğinin adıdır( gibi
Path=PropertyName
).Bir özelliğin alt özellikleri, C# dilindekine benzer bir söz dizimi ile belirtilebilir. Örneğin, yan tümcesi
Path=ShoppingCart.Order
bağlamayı nesnesinin veya özelliğininShoppingCart
alt özelliğineOrder
ayarlar.Ekli bir özelliğe bağlanmak için, ekli özelliğin çevresine ayraçlar yerleştirin. Örneğin, ekli özelliğine DockPanel.Dockbağlanmak için söz dizimi şeklindedir
Path=(DockPanel.Dock)
.Bir özelliğin dizin oluşturucuları, dizin oluşturucunun uygulandığı özellik adının ardından köşeli ayraçlar içinde belirtilebilir. Örneğin, yan tümcesi
Path=ShoppingCart[0]
, özelliğinizin iç dizin oluşturma işleminin "0" değişmez dizesini nasıl işlediğine karşılık gelen bağlamayı dizine ayarlar. İç içe dizin oluşturucular da desteklenir.Dizin oluşturucular ve alt özellikler bir
Path
yan tümcede karıştırılabilir; örneğin,Path=ShoppingCart.ShippingInfo[MailingAddress,Street].
Dizin oluşturucuların içinde virgülle (,) ayrılmış birden çok dizin oluşturucu parametresi olabilir. Her parametrenin türü parantez içinde belirtilebilir. Örneğin, ad alanına eşlenmiş
System
olansys
öğesine sahipPath="[(sys:Int32)42,(sys:Int32)24]"
olabilirsiniz.Kaynak bir koleksiyon görünümü olduğunda, geçerli öğe eğik çizgi (/) ile belirtilebilir. Örneğin, yan tümcesi
Path=/
görünümdeki geçerli öğeye bağlamayı ayarlar. Kaynak bir koleksiyon olduğunda, bu söz dizimi varsayılan koleksiyon görünümünün geçerli öğesini belirtir.Özellik adları ve eğik çizgiler, koleksiyonlar olan özellikler arasında geçiş yapmak için birleştirilebilir. Örneğin,
Path=/Offices/ManagerName
aynı zamanda koleksiyon olan birOffices
özelliği içeren kaynak koleksiyonun geçerli öğesini belirtir. Geçerli öğesi bir özellik içeren birManagerName
nesnedir.İsteğe bağlı olarak, geçerli kaynağa bağlanmak için nokta (.) yolu kullanılabilir. Örneğin
Text="{Binding}"
ileText="{Binding Path=.}"
eşdeğerdir.
Kaçış Mekanizması
Dizin oluşturucuların içinde ([ ]), şapka işareti karakteri (^) sonraki karakterden kaçar.
XAML'de ayarlarsanız Path , XML dil tanımı için özel olan belirli karakterlere de (XML varlıklarını kullanarak) kaçış yapmanız gerekir:
"&" karakterinden kaçmak için kullanın
&
.">" bitiş etiketinden kaçmak için kullanın
>
.
Ayrıca, işaretleme uzantısı söz dizimini kullanarak bir öznitelikteki bağlamanın tamamını açıklarsanız, WPF işaretleme uzantısı ayrıştırıcısı için özel olan karakterlerden kaçış (ters eğik çizgi \kullanarak) gerekir:
Ters eğik çizgi (\), kaçış karakterinin kendisidir.
Eşittir işareti (=), özellik adını özellik değerinden ayırır.
Virgül (,) özellikleri ayırır.
Sağ küme ayracı (}), işaretleme uzantısının sonudur.
Varsayılan Davranışlar
Bildirimde belirtilmezse varsayılan davranış aşağıdaki gibidir.
Bağlama kaynak değeri ile bağlama hedef değeri arasında tür dönüştürmesi yapmaya çalışan bir varsayılan dönüştürücü oluşturulur. Dönüştürme yapılamazsa, varsayılan dönüştürücü döndürür
null
.ayarlamazsanız ConverterCulture, bağlama altyapısı bağlama hedef nesnesinin özelliğini kullanır
Language
. XAML'de bu varsayılan olarak "en-US" olarak ayarlanır veya açıkça ayarlanmışsa, değeri sayfanın kök öğesinden (veya herhangi bir öğeden) devralır.Bağlamanın zaten bir veri bağlamı (örneğin, bir üst öğeden gelen devralınan veri bağlamı) ve bu bağlam tarafından döndürülen öğe veya koleksiyon daha fazla yol değişikliği gerektirmeden bağlama için uygun olduğu sürece, bağlama bildiriminin hiçbir yan tümcesi olamaz:
{Binding}
Bu genellikle veri stili için bağlamanın belirtildiği yoldur, burada bağlama bir koleksiyon üzerinde hareket eder. Daha fazla bilgi için Bağlama Kaynaklarına Genel Bakış bölümündeki "Bağlama Kaynağı Olarak Kullanılan Nesnelerin Tamamı" bölümüne bakın.Varsayılan Mode , bağlı olan bağımlılık özelliğine bağlı olarak tek yönlü ile iki yönlü arasında değişir. Bağlamanızın istenen davranışa sahip olduğundan emin olmak için bağlama modunu istediğiniz zaman açıkça bildirebilirsiniz. Genel olarak, ve RangeBase.Valuegibi kullanıcı tarafından düzenlenebilir denetim özellikleri varsayılan olarak TextBox.Text iki yönlü bağlamalara, diğer özelliklerin çoğu ise tek yönlü bağlamalara varsayılandır.
Varsayılan UpdateSourceTrigger değer, bağlı bağımlılık özelliğine de bağlı olarak ve LostFocus arasında PropertyChanged değişir. Çoğu bağımlılık özelliğinin varsayılan değeri, PropertyChangedözelliği ise TextBox.Text varsayılan değeri olur LostFocus.
Ayrıca bkz.
.NET Desktop feedback