Diferenças entre ElementName = “” e RelativeSource auto?
-
08-07-2019 - |
Pergunta
Quais são as diferenças entre fazer uma auto-referencial através do nome contra ligação auto-referencial através RelativeSource?
Por exemplo:
<!-- Self referential via name -->
<Window ...
x:Name="This"
DataContext="{Binding Path=Data, ElementName=This}"/>
contra
<!-- Self referential via RelativeSource -->
<Window ...
x:Name="This"
DataContext="{Binding Path=Data, RelativeSource={RelativeSource Self}}"/>
No meu projeto eles parecem se comportar de forma idêntica, mas eu estou usando-los diretamente em uma janela. Isso significa que eu prefiro imediatamente o primeiro porque é menos digitação.
É a única vantagem de RelativeSource sua capacidade de ser auto-referencial, em (por exemplo) um estilo amplamente utilizado? Ou há alguma diferença semântica adicional?
Solução
Aviso: Não é um WPF assistente
Quando você está ligando diretamente em um elemento WPF como no seu exemplo, não há diferença. "Isto" é resolúvel e vai ligar para o mesmo item como Self.
Minha suspeita é as mentiras diferença quando você está ligando através de construções como Style. Nesse caso, o que você realmente deseja vincular a é o elemento o estilo é aplicado. Neste caso RelativeSource auto lhe dará esse elemento onde "isto" vai apenas dar-lhe um exemplo do estilo.
Outras dicas
Se você tende a refazer os nomes de seus controles de um lote, em seguida, usando o formulário refrential auto pode ser mais desejável caso contrário eu diria que é uma chamada que gostaria de fazer com base no desempenho. Construir um pequeno teste para ver que tipo de ligação executa melhor e escolher que um. Se a diferença de desempenho é insignificante, então eu definitivamente levar em consideração outras considerações facilidade de manutenção, tais como a aparência geral e tempo para tipo. Também não se esqueça, quando se utiliza o auto referencial formar você não tem o nome do seu elemento de modo que você tem que incluir essa exigência de nomeação extra para a forma ElementName ao comparar o quanto digitação e troca de contexto entre o mouse eo teclado.
Pessoalmente, prefiro as formas de ligação referenciais quando faz sentido para fins de refatoração mais fácil e o fato de que eu não tenho para se mover meu documento XAML para adicionar um nome de elemento quando eu configurar a ligação.
Por que você acha que há uma diferença entre eles? Eu acho que eles devem ser idênticos, uma vez que são duas maneiras de se referir ao mesmo elemento.