WPF Binden an sich

86

Ich habe eine WPF Windowund irgendwo gibt es eine, ListViewan die ich eine binde List<string>.

Jetzt gibt es irgendwo in meinem ListVieweine TextBoxund die ContentEigenschaft ist auf eingestellt {Binding}.

Aber das ist die Abkürzung. Wie schreibe ich die vollständige Bindung, um an sich selbst zu binden?

{Binding Path=Self}funktioniert auch nicht {Binding Self}(wobei Letzteres eine Abkürzung für Ersteres ist).

Schlange
quelle
Ich möchte einen Beitrag zu diesem Thema erwähnen. Die obige Antwort ist völlig korrekt, aber es gibt einen Punkt, der die obige Antwort vervollständigt. Hier ist der Link .
AAAA

Antworten:

247

Kurze Antwort : {Binding}ist keine Abkürzung für "Bindung an sich selbst" (im Sinne von RelativeSource.Self ). Eher {Binding} ist äquivalent zu {Binding Path=.} , was an die aktuelle Quelle bindet.


Um es näher zu erläutern : Eine Bindung hat eine Quelle und einen Pfad . Sie können beispielsweise eine "Bindung an sich selbst" durchführen, indem Sie verwenden

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

Dadurch wird die Quelle jedoch auf das Steuerelement selbst festgelegt, sodass versucht wird, auf die Eigenschaft xdes UI-Steuerelements zuzugreifen (und nicht auf die Eigenschaft xdes aktuellen Datenkontexts). Soweit ich Ihre Frage verstanden habe, ist dies nicht das, was Sie wollen. Insbesondere ist es nicht das, was es {Binding}tut: {Binding}Die Quelle bleibt wie sie ist (normalerweise die DataContexteines übergeordneten Elements) und bindet an die Quelle selbst (entspricht Path=.).

Heinzi
quelle
Ich habe ein DataGrid, bei dem der Benutzer, wenn er über eine KeyBinding eines InputBinding auf einen der MenuItem-Befehle seines ContextMenu zugreift CommandParameter="{Binding ElementName=MyDataGrid, Path=SelectedItems}", die SelectedItems an den Bound ICommand übergibt. nullWird jedoch übergeben, wenn über das ContextMenu zugegriffen wird. Ich habe versucht, CommandParameter="{Binding SelectedItems}" , "{Binding ElementName = MyDataGrid, Path = SelectedItems}" `und "{Binding RelativeSource={RelativeSource Self}, Path=SelectedItems}".
Tom
@ Tom: Dies ist schwer in einem Kommentar zu beantworten. Bitte erstellen Sie eine neue Frage und geben Sie ein minimal reproduzierbares Beispiel an .
Heinzi