Вы не можете сделать это таким образом.
Для достижения такого трюка вам понадобятся, чтобы ваши предметы были «классами держателей», которые выставляют свойство, к которому вы можете привязать свое текстовое поле.
Чтобы понять это, представьте себе следующую псевдо последовательность вызовов:
class ListBox
{
Bind(Items)
{
foreach(var item in Items)
{
DataTemplate Template = LoadTemplateForItem(item.GetType()); // this is where your template get loaded
Template.Bind(item); //this is where your template gets bound
}
}
}
Ваш шаблону (DataTemplate с ListBox) загружается и элемент (который я предполагаю, это строка в вашем случае) пропускается in. На данный момент он знает только строку и не может ничего влиять на нее. Двусторонняя привязка не может влиять на сбор, поскольку шаблон не знает, в каком контексте он используется, поэтому он не может вернуться к исходной коллекции и изменить ее содержимое. В этом отношении, это то же самое для TextBox. Если ему не дано имя контейнера и имя свойства, ему некуда «хранить» изменения. Это в основном то же самое, что передать строку в вызов функции. Функция не может изменить, какая строка была передана (игнорируя трюки, такие как передача аргументов по ссылке).
Чтобы вернуться к вашему делу, вы должны создать коллекцию объектов, которые обнажают свойство, содержащее значение, которое должно быть отредактировано:
public class MyDataItem
{
string Data { get; set;}
}
Затем вы можете связать свой ListBox к коллекции тех, пунктов и modifiy вашей datatemplate:
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Name="EditableText" Text="{Binding Data, Mode=TwoWay}"/>
</DataTemplate>
</ListBox.ItemTemplate>
У меня есть аналогичная проблема, но поскольку я очень новичок в WPF, я не знаю, как написать {Binding Data, Mode = TwoWay}, если у меня есть список строк и нет никакого действительного свойства, которое может быть связано –
You не могу, вот в чем мой ответ ... Вам нужно взять список строк, создать список объектов, содержащих эти строки (каждый объект содержит одну строку, доступную через свойство), и отобразить этот дополнительный список в ListBox , –