В моем проекте WPF у меня есть ListBox, который отображает элементы из коллекции List<string>
. Я хотел, чтобы текст этих элементов редактировался, поэтому я завернул каждую из них в ItemTemplate с помощью TextBox (возможно, это не лучший способ, но я новичок в WPF). У меня возникли проблемы, просто привязывая свойство TextBoxes Text к значению каждого элемента. Я, наконец, наткнулся на пример, используя одну точку или период для свойства Path ({Binding Path=.}
):
<ListBox ItemsSource="{Binding ElementName=recipesListbox,Path=SelectedItem.Steps}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=.}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Однако я не понимаю, почему просто использование {Binding}
не работало.
Он поднял исключение " Двусторонняя привязка требует исключения Path или XPath", в соответствии с Microsoft:
[...] для привязки к текущему источнику может использоваться путь периода (.). Например, Text = "{Binding}" эквивалентен Text = "{Binding Path =.}"
Может ли кто-то пролить свет на это двусмысленное поведение?
EDIT: Кроме того, кажется, что {Binding Path=.}
не обязательно дает двустороннюю привязку, так как изменение текста и перемещение фокуса не обновляют базовый источник (тот же источник также показывает свойства и успешно изменен в элементе управления DataGrid). Я определенно что-то пропустил.