Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1909, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

WPF 4.5: Nuove API per le Binding Expressions

Già nelle precedenti versioni di WPF esisteva una classe chiamata BindingOperations, che consente l'interazione con le espressioni di binding poste in essere attraverso istanze di System.Windows.Data.Binding e System.Windows.Data.MultiBinding.

In WPF 4.5 questa classe viene arricchita con alcune API che permettono di conoscere ulteriormente, a runtime, le espressioni di binding. In particolare è possibile recuperare:

  • l'oggetto destinatario del binding
  • la proprietà del citato oggetto, destinataria del binding
  • il tipo che costituisce la sorgente dati
  • la proprietà della sorgente dati che è collegata in binding

Ad esempio consideriamo il seguente codice, in cui una TextBox è collegata in binding a un'istanza di una ipotetica classe Person (o Contact o come volete ) che esponga una proprietà chiamata FirstName:

        <StackPanel DataContext="{Binding}">
            <TextBlock Text="{Binding FirstName}" FontSize="18" Name="NameBox"/>
            <Button Name="GetBindingButton" Width="100" Height="30" Content="Go!"/>
        </StackPanel>

In questo esempio la binding expression è costituita dal contenuto della coppia di parentesi graffe all'interno della proprietà Text. Scrivendo codice come il seguente:

    Dim expression = BindingOperations.GetBindingExpression(NameBox, TextBlock.TextProperty)
 
    Dim target As DependencyObject = Expression.Target
    Dim targetProperty As DependencyProperty = Expression.TargetProperty
    Dim source As Object = Expression.ResolvedSource
    Dim sourceName As String = Expression.ResolvedSourcePropertyName
 
    'Mostra: TextBlock
        MessageBox.Show(target.DependencyObjectType.Name)
    'Mostra: Text
        MessageBox.Show(targetProperty.Name)
    'Mostra: Person (o Contact o il nome del tipo)
        MessageBox.Show(source.GetType.Name)
    'Mostra: FirstName
        MessageBox.Show(sourceName)

è possibile ottenere determinate informazioni sul binding, come da commenti nel codice. Fondamentale è l'invocazione al metodo GetBindingExpression della classe BindingOperations, i cui argomenti sono il nome del controllo su cui insiste il binding e il nome della dependency property di cui vogliamo ottenere informazioni. E' abbastanza ovvio che, nel caso degli oggetti target, si tratti rispettivamente di DependencyObject e DependencyProperty. Questo è chiaramente solo un esempio, sfruttando le varie proprietà di istanza esposte dai tipi ottenuti è possibile ottenere anche il risultato di espressioni più complesse.

Alessandro

Print | posted on martedì 21 febbraio 2012 19:19 | Filed Under [ Windows Presentation Foundation ]

Powered by:
Powered By Subtext Powered By ASP.NET