WPF Binding an List<T> - Update bei Add Methode
-
Hi ...
Eine Klasse...
public class newQuestionStruct : DependencyObject , INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected static readonly DependencyProperty antwortenProperty = DependencyProperty.Register("antworten", typeof(List<String>), typeof(newQuestionStruct), new PropertyMetadata(new List<String>())); public List<String> antworten { get { return (List<String>)GetValue(antwortenProperty); } set { SetValue(antwortenProperty, value); OnPropChanged(antwortenProperty.Name); } } public String AddAntwort { set { if (!antworten.Contains (((String)value))) antworten.Add ((String)value); OnPropChanged(antwortenProperty.Name); } } public String RemoveAntwort { set { antworten.Remove(((String)value)); OnPropChanged(antwortenProperty.Name); } } public void OnPropChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new opertyChangedEventArgs(propertyName)); } }
Der Inhalt einer ListBox ist via
ItemsSource="{Binding aktuelleFrage.antworten, Mode=TwoWay, UpdateSourceTrigger=Default}"
an die "antworten" gebunden.
Eine TextBox erweitert die Antworten im KeyDown Event um einen String:
IaktuelleFrageClass.aktuelleFrage.AddAntwort = ((TextBox)sender).Text;
Allerdings wird das "Binding" nicht aktualisiert, bzw. die neue Antwort erscheint nicht in der ListBox, obwohl die List laut Debugger erweitert wurde.
Wo liegt mein Fehler ?
-
Du hast den Falschen Ansatz, du sagst das die Liste selber sich geändert hat, das stimmt aber nicht, die Liste ist immer noch die selbe, aber der Inhalt der Liste hat sich geändert
Hintergrund:
Binding arbeite mit den Observer Pattern, dh er schnappt sich bei dem Gebundenen Objekt entweder das "CollectionChanged" Event wenn es eine Liste ist, oder das PropertyChanged wenn es ein Property ist.Stichwort INotifyCollectionChanged, INotifyPropertyChanged.
Es gibt schon eine Fertige Liste die das INotifyCollectionChanged implementiert, die ObservableCollection<T>. Nimm die statt die List<T>.
-
Du hast den Falschen Ansatz, du sagst das die Liste selber sich geändert hat, das stimmt aber nicht, die Liste ist immer noch die selbe, aber der Inhalt der Liste hat sich geändert
Klar, logisch
Problem ist damit erledigt. Danke.