DataContext
каждого ListBoxItem
является самой строкой, поэтому путь вашей привязки пуст (.
).Для привязок TwoWay
и OneWayToSource
требуется путь, поскольку вы не можете просто заменить текущую DataContext
.Таким образом, вам нужно обернуть вашу строку в объект, который представляет строку как свойство:
public class StringItem
{
public string Value { get; set; }
}
Представить строки в виде списка StringItem
:
public partial class MainWindow : Window
{
List<StringItem> _nameList = null;
public List<StringItem> NameList
{
get
{
if (_nameList == null)
{
_nameList = new List<StringItem>();
}
return _nameList;
}
set
{
_nameList = value;
}
}
public MainWindow()
{
NameList.Add(new StringItem { Value = "test1" });
NameList.Add(new StringItem { Value = "test2" });
InitializeComponent();
}
И связать ссвойство Value
:
<ListBox Grid.Row="0" Grid.Column="0" DataContext="{Binding ElementName=main}" ItemsSource="{Binding NameList}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Value, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Обратите внимание, что StringItem
также потребуется реализовать INotifyPropertyChanged
, чтобы привязки автоматически обновлялись.Вы должны также выставить список как ObservableCollection<T>
, а не List<T>