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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top