Binding WPF : ElementName i RelativeSource

Aquest post vull parlar d’un tipus d’enllaç que podem fer a les nostres aplicacions WPF o Silverlight. Enllaç a les propietats de la instància que pertany el control. Aquesta instància pot ser una Window o Page o un UserControl o un CustomControl.

És una pràctica molt habitual per poder accedir a les propietats de la classe a la que pertany el control sense la necessitat de assignar-lo a cap DataContext. Pràctica no molt recomanada amb Silverlight perquè ens obliga a posar un nom a la instància i això pot provocar problemes ja que es pot repetir el nom dins l’arbre de controls, això mateix amb aplicacions WPF no passa o almenys no diu res.

Per aconseguir enllaçar amb aquesta propietat hem d’indicar la font amb l’atribut ElementName.

{Binding Path=Text,ElementName=me}

A l’exemple ens referim a la propietat Text de la instància.

public string Text{get;set;}

on me és el nom que hem donat mitjançant l’atribut x:Name al fitxer XAML.

<window x:Name=me></window>

En quant apliquem estils per un diccionari de recursos i apliquem el Control Template la manera que tenim de referenciar-nos a la instància és per RelativeSource. Al crear un Control Template aquest es pot aplicar en qualsevol lloc on existeixi el tipus que estem especificant per el TargetType i per tant no podem controlar quin és el nom que es donarà a la instància. És per això que tenim el RelativeSource i TemplatedParent.

{Binding Path=Text,RelativeSource={RelatieSource TemplatedParent}}

Aquest només és aplicable en un Control Template.

Si no estem en un Control Template també podem utilitzar el RelativeSource per referir-nos a elements dins l’arbre de controls.

Anuncis

2 pensaments sobre “Binding WPF : ElementName i RelativeSource

    • Hola Òscar,
      posar un exemple és massa complicat per aquest blog, però el què tens és la comparació del què s’hauria de fer en el mateix post.
      Si mai tens algun problema m’ho dius i intentaré resoldre el més aviat possible.

      Gràcies

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out / Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out / Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out / Canvia )

Google+ photo

Esteu comentant fent servir el compte Google+. Log Out / Canvia )

Connecting to %s