WPF привязать к себе


86

У меня есть WPF Window, и где-то есть место, к ListViewкоторому я привязываю List<string>.

Теперь где-то в моем ListViewесть TextBoxи Contentсвойство установлено на {Binding}.

Но это стенография. Как мне написать полную привязку для привязки к самой себе?

{Binding Path=Self}не работает, и тоже {Binding Self}(где последнее является ярлыком для первого).


Я хочу упомянуть сообщение, относящееся к этой теме. Вышеупомянутый ответ полностью верен, но есть момент, который завершает приведенный выше ответ. Вот ссылка .
Али Фаттахян

Ответы:


247

Краткий ответ : {Binding}это не ярлык для «привязки к самому себе» (в смысле RelativeSource.Self ). Скорее, {Binding} это эквивалент {Binding Path=.} , который привязывается к текущему источнику.


Чтобы уточнить : привязка имеет источник и путь . Вы можете выполнить «привязку к самому себе», например, используя

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

Это, однако, устанавливает источник для самого xэлемента управления, поэтому он будет пытаться получить доступ к свойству элемента управления пользовательского интерфейса (а не к свойству xтекущего контекста данных). Насколько я понял ваш вопрос, это не то, что вам нужно; в частности, это не то, что {Binding}делает: {Binding}сохраняет исходный код таким, какой он есть (обычно это DataContextкакой-то родительский элемент), и привязывается к самому источнику (эквивалентно Path=.).


У меня есть DataGrid, где, если пользователь получает доступ к одной из своих команд MenuItem в ContextMenu через KeyBinding InputBinding, для которой CommandParameter="{Binding ElementName=MyDataGrid, Path=SelectedItems}"он передает SelectedItems в Bound ICommand. Однако nullпередается, если к нему обращаются через ContextMenu. Я пробовал CommandParameter="{Binding SelectedItems}" , "{Binding ElementName = MyDataGrid, Path = SelectedItems}" и "{Binding RelativeSource={RelativeSource Self}, Path=SelectedItems}".
Том

@Tom: На это сложно ответить в комментарии. Создайте новый вопрос и предоставьте минимально воспроизводимый пример .
Heinzi
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.