Powiązanie WPF z samym sobą

86

Mam WPF Windowi gdzieś jest miejsce, do ListViewktórego się powiążę List<string>.

Teraz gdzieś w moim ListViewjest TextBoxi Contentwłaściwość jest ustawiona na {Binding}.

Ale to jest skrót. Jak napisać pełne powiązanie, aby się ze sobą powiązać?

{Binding Path=Self}nie działa, też nie {Binding Self}(gdzie to drugie jest skrótem do pierwszego).

Wąż
źródło
Chciałbym wspomnieć o poście związanym z tym tematem. Powyższa odpowiedź jest całkowicie poprawna, ale jest punkt, który uzupełnia powyższą odpowiedź. Oto link .
Ali Fattahian

Odpowiedzi:

247

Krótka odpowiedź : {Binding}to nie skrót dla „wiązanie do siebie” (w sensie RelativeSource.Self ). Raczej {Binding} jest odpowiednikiem {Binding Path=.} , który wiąże się z bieżącym źródłem.


Aby rozwinąć : Wiązanie ma źródło i ścieżkę . Możesz wykonać „powiązanie ze sobą”, na przykład za pomocą

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

To jednak ustawia źródło na samą kontrolkę, więc spróbuje uzyskać dostęp do właściwości xkontrolki interfejsu użytkownika (zamiast właściwości xbieżącego kontekstu danych). Z tego, jak zrozumiałem twoje pytanie, nie tego chcesz; w szczególności nie jest tym, co {Binding}robi: {Binding}zachowuje źródło tak, jak jest (zwykle jest to DataContextelement rodzica) i wiąże się z samym źródłem (odpowiednik Path=.).

Heinzi
źródło
Mam DataGrid, gdzie jeśli użytkownik uzyskuje dostęp do jednego z poleceń MenuItem ContextMenu za pośrednictwem KeyBinding InputBinding, którego CommandParameter="{Binding ElementName=MyDataGrid, Path=SelectedItems}", przekaże SelectedItems do Bound ICommand. Jednak nulljest przekazywany, jeśli dostęp do niego uzyskuje się za pośrednictwem ContextMenu. Próbowałem CommandParameter="{Binding SelectedItems}" , "{Binding ElementName = MyDataGrid, Path = SelectedItems}" "i "{Binding RelativeSource={RelativeSource Self}, Path=SelectedItems}".
Tom
@Tom: Trudno odpowiedzieć w komentarzu. Utwórz nowe pytanie i podaj minimalny powtarzalny przykład .
Heinzi