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).


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=.).


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.