Non puoi farlo in questo modo.
Per ottenere questo tipo di trucco, i tuoi articoli devono essere "classi di titolari" che espongono una proprietà a cui puoi associare la tua casella di testo.
per capirlo, immaginare la seguente sequenza pseudo di chiamate:
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
}
}
}
Il modello (DataTemplate con la casella di riepilogo) viene caricato e l'oggetto (che presumo è una stringa nel tuo caso) viene superato A questo punto, conosce solo la stringa e non può influenzare nulla verso l'alto. Un'associazione bidirezionale non può influenzare la raccolta perché il modello non sa in quale contesto viene utilizzato, quindi non può raggiungere la raccolta originale e modificarne il contenuto. Per questo, questa è la stessa cosa per il TextBox. Se non viene fornito un conainer e un nome di proprietà, non ha alcun luogo per "memorizzare" le modifiche. Fondamentalmente è come passare una stringa in una chiamata di funzione. La funzione non può cambiare quale stringa è stata passata (ignorando trucchi come passare per argomento di riferimento).
Per tornare al vostro caso, è necessario costruire una collezione di oggetti che espongono una proprietà che contiene il valore che deve essere modificato:
public class MyDataItem
{
string Data { get; set;}
}
Quindi è possibile vincolare il proprio ListBox a una raccolta di quelli articoli e modificare il datatemplate:
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Name="EditableText" Text="{Binding Data, Mode=TwoWay}"/>
</DataTemplate>
</ListBox.ItemTemplate>
fonte
2009-04-12 06:22:45
Ho un problema simile, ma poiché sono molto nuovo con WPF non so come scrivere {Binding Data, Mode = TwoWay} se ho una lista di stringhe e non ci sono proprietà reali che possono essere associate a –
impossibile, questo è il punto della mia risposta ... È necessario prendere l'elenco delle stringhe, creare un elenco di oggetti contenenti tali stringhe (ogni oggetto contiene una stringa, accessibile tramite una proprietà) e visualizzare quell'elenco secondario in ListBox . –