你不能這樣做。
要實現這種技巧,您需要將您的項目作爲「持有者類」,公開可以綁定文本框的屬性。
要理解它,想象一下以下調用僞序列:裝載被傳遞
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中與列表框)和項目(我假設你的情況的字符串) in。 在這一點上,它只知道字符串,並且不能向上影響任何東西。雙向綁定不能影響集合,因爲模板不知道它在哪個上下文中被使用,所以它無法回到原始集合並修改其內容。 對於這個問題,TextBox是一樣的。如果它沒有被賦予一個conainer和一個屬性名稱,它無處可以「存儲」這些變化。 這與將字符串傳遞給函數調用基本相同。該函數不能更改傳入的字符串(忽略像引用參數傳遞這樣的技巧)。
要回到你的情況,你需要建立其暴露包含需要編輯的值的屬性對象的集合:
public class MyDataItem
{
string Data { get; set;}
}
然後你就可以在你的列表框綁定到這些集合項目和修改您的數據模板:
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Name="EditableText" Text="{Binding Data, Mode=TwoWay}"/>
</DataTemplate>
</ListBox.ItemTemplate>
我不認爲我可以將文本框文本直接綁定到數據對象。在你的例子中,你綁定到單個字符串,但我的類有它們的集合,我不能將Text屬性設置爲字符串列表。 – 2009-04-13 03:11:06
爲Items集合的每個成員重複DataTemplate,並將綁定設置爲該成員。 – itowlson 2009-04-13 03:51:04