WPF Прив'язка до себе


86

У мене є WPF Window, і десь є десь, ListViewде я прив'язую List<string>.

Зараз десь у моєму ListViewє a TextBoxі Contentвластивість встановлено на {Binding}.

Але це скорочення. Як написати повну прив'язку для прив'язки до себе?

{Binding Path=Self}не працює, не працює {Binding Self}(де остання - це ярлик для першої).


Я хочу сказати про публікацію, пов’язану з цією темою. Наведена вище відповідь є абсолютно правильною, але є пункт, який доповнює вищезазначену відповідь. Ось посилання .
Алі Фаттахян

Відповіді:


247

Коротка відповідь : {Binding}це не ярлик для "прив'язки до себе" (у розумінні RelativeSource.Self ). Швидше, {Binding} еквівалент {Binding Path=.} , який прив'язується до поточного джерела.


Пояснити : Прив’язка має джерело та шлях . Ви можете зробити "прив'язку до себе", наприклад, за допомогою

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

Однак це встановлює джерело на сам елемент управління, тому він намагатиметься отримати доступ до властивості xелемента керування UI (а не до властивості xпоточного контексту даних). Наскільки я зрозумів ваше запитання, це не те, що ви хочете; зокрема, це не те, що {Binding}робить: {Binding}зберігає джерело таким, яке воно є (зазвичай це DataContextякийсь батьківський елемент), і прив’язує до самого джерела (еквівалентно Path=.).


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

@Tom: На це важко відповісти в коментарі. Будь ласка, створіть нове запитання та надайте мінімальний приклад, що відтворюється .
Хайнзі,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.