WPF se lier à lui-même

86

J'ai un WPF Window, et quelque part il y a un ListViewauquel je lie un List<string>.

Maintenant, quelque part dans mon ListViewil y a un TextBoxet la Contentpropriété est définie sur {Binding}.

Mais c'est la sténographie. Comment écrire la liaison complète pour la lier à elle-même?

{Binding Path=Self}ne fonctionne pas, non plus {Binding Self}(où le dernier est un raccourci pour le premier).

Serpent
la source
Je veux mentionner un article lié à ce sujet.La réponse ci-dessus est tout à fait correcte mais il y a un point qui complète la réponse ci-dessus. Voici le lien .
Ali Fattahian

Réponses:

247

Réponse courte : {Binding}n'est pas un raccourci pour «se lier à lui-même» (au sens de RelativeSource.Self ). Au contraire, {Binding} équivaut à {Binding Path=.} , qui se lie à la source actuelle.


Pour élaborer : Une liaison a une source et un chemin . Vous pouvez effectuer une "liaison à lui-même", par exemple, en utilisant

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

Cependant, cela définit la source sur le contrôle lui-même, de sorte qu'il essaie d'accéder à la propriété xdu contrôle d'interface utilisateur (plutôt qu'à la propriété xdu contexte de données actuel). D'après la façon dont j'ai compris votre question, ce n'est pas ce que vous voulez; en particulier, ce n'est pas ce qui {Binding}fait: {Binding}conserve la source telle qu'elle est (généralement celle DataContextd'un élément parent) et se lie à la source elle-même (équivalent à Path=.).

Heinzi
la source
J'ai un DataGrid où si l'utilisateur accède à l'une des commandes de MenuItem de son ContextMenu via le KeyBinding d'un InputBinding dont CommandParameter="{Binding ElementName=MyDataGrid, Path=SelectedItems}", il passera les SelectedItems à l'ICommand Bound. Cependant, nullest transmis s'il est accédé via le ContextMenu. J'ai essayé CommandParameter="{Binding SelectedItems}" , "{Binding ElementName = MyDataGrid, Path = SelectedItems}" `et "{Binding RelativeSource={RelativeSource Self}, Path=SelectedItems}".
Tom
@Tom: C'est difficile de répondre dans un commentaire. Veuillez créer une nouvelle question et fournir un exemple minimal reproductible .
Heinzi