Aracılığıyla paylaş


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ğinin ShoppingCartalt özelliğine Order 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 olan sys öğesine sahip Path="[(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 bir Offices özelliği içeren kaynak koleksiyonun geçerli öğesini belirtir. Geçerli öğesi bir özellik içeren bir ManagerName nesnedir.

  • İsteğe bağlı olarak, geçerli kaynağa bağlanmak için nokta (.) yolu kullanılabilir. Örneğin Text="{Binding}" ile Text="{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 &amp; .

    • ">" bitiş etiketinden kaçmak için kullanın&gt;.

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