WPF Vincular a si mesmo

86

Eu tenho um WPF Windowe em algum lugar há um ListViewonde eu vinculo um List<string>.

Agora, em algum lugar do meu ListViewhá um TextBoxe a Contentpropriedade está definida como {Binding}.

Mas esta é a abreviatura. Como escrevo a vinculação completa para vincular a si mesma?

{Binding Path=Self}não funciona, nem funciona {Binding Self}(onde o último é um atalho para o primeiro).

Serpente
fonte
Quero mencionar para uma postagem relacionada a este tópico. A resposta acima está totalmente correta, mas há um ponto que completa a resposta acima. Aqui está o link .
Ali Fattahian

Respostas:

247

Resposta curta : não{Binding} é um atalho para "vincular a si mesmo" (no sentido de RelativeSource.Self ). Em vez disso, é equivalente a , que se liga à fonte atual.{Binding} {Binding Path=.}


Para elaborar : uma ligação tem uma origem e um caminho . Você pode fazer uma "ligação a si mesmo", por exemplo, usando

<myUIControl myProperty="{Binding RelativeSource={RelativeSource Self}, Path=x}" />

Isso, no entanto, define a origem do próprio controle, portanto, ele tentará acessar a propriedade xdo controle da interface do usuário (em vez da propriedade xdo contexto de dados atual). Pelo que entendi sua pergunta, não é isso que você quer; em particular, não é o que {Binding}faz: {Binding}mantém a fonte como ela está (geralmente o DataContextde algum elemento pai) e se liga à própria fonte (equivalente a Path=.).

Heinzi
fonte
Eu tenho um DataGrid onde se o usuário acessa um dos Comandos de MenuItem do ContextMenu através de um KeyBinding de InputBinding cujo CommandParameter="{Binding ElementName=MyDataGrid, Path=SelectedItems}", ele vai passar os SelectedItems para o Bound ICommand. No entanto, nullé passado se for acessado por meio do ContextMenu. Eu tentei CommandParameter="{Binding SelectedItems}" , "{Binding ElementName = MyDataGrid, Path = SelectedItems}" `e "{Binding RelativeSource={RelativeSource Self}, Path=SelectedItems}".
Tom
@Tom: Isso é difícil de responder em um comentário. Crie uma nova pergunta e forneça um exemplo reproduzível mínimo .
Heinzi