2009-03-10 16 views
12

¿Cuáles son las diferencias entre hacer un enlace autorreferencial a través de nombre versus autorreferencial a través de RelativeSource?¿Diferencias entre ElementName = "<Me>" y RelativeSource?

Por ejemplo:

<!-- Self referential via name --> 
<Window ... 
    x:Name="This" 
    DataContext="{Binding Path=Data, ElementName=This}"/> 

frente

<!-- Self referential via RelativeSource --> 
<Window ... 
    x:Name="This" 
    DataContext="{Binding Path=Data, RelativeSource={RelativeSource Self}}"/> 

En mi proyecto en el que parecen comportarse de forma idéntica, pero estoy usando directamente en una ventana. Esto significa que de inmediato prefiero el primero porque es menos tipeo.

¿La única ventaja de RelativeSource es su autorreferencia en (por ejemplo) un estilo ampliamente utilizado? ¿O hay alguna diferencia semántica adicional?

Respuesta

8

Advertencia: No es un asistente WPF

Cuando va a enlazar directamente sobre un elemento de WPF como en tu ejemplo, no hay diferencia. "Esto" se puede resolver y se unirá al mismo elemento que el Yo.

Mi sospecha es que la diferencia radica en que se une mediante construcciones como Style. En ese caso, lo que realmente quiere vincular es el elemento al que se aplica el estilo. En este caso, RelativeSource Self le dará ese elemento donde "this" simplemente le dará una instancia de Style.

+1

Esto era lo único que podía pensar o encontrar, también. Me encontré con muchas otras preguntas sobre WPF donde perdí información, así que quería ver si alguien más tenía algo sobre esto. Gracias, Jared. :) –

-1

¿Por qué crees que hay una diferencia entre ellos? Creo que deberían ser idénticos, ya que son dos formas de referirse al mismo elemento.

+0

'Creo' y 'debería' no constituye una respuesta. Considere evaluar cómo cada método resuelve el objetivo y los escenarios que pueden causar diferencias. Ver la respuesta de JaredPar. – Gusdor

2

Si tiende a refactorizar los nombres de sus controles mucho, entonces usar el formulario de autorreferente puede ser más deseable, de lo contrario, diría que es una llamada que haría en función del rendimiento. Construya una pequeña prueba y vea qué tipo de enlace funciona mejor y elija ese. Si la diferencia en el rendimiento es insignificante, definitivamente tomaría en consideración otras consideraciones de mantenimiento tales como la apariencia general y el tiempo para escribir. Además, no olvide que, al usar el formulario autorreferencial, no tiene que nombrar su elemento, por lo que debe incluir ese requisito de nomenclatura adicional para el formulario ElementName al comparar la cantidad de escritura y el cambio de contexto entre el mouse y el teclado.

Personalmente prefiero las formas de enlace referencial cuando tiene sentido para facilitar la refactorización y el hecho de que no tengo que mover mi documento XAML para agregar un nombre de elemento cuando configuro el enlace.