Ich habe eine Liste <Foo> von einer Nicht-WPF-Assembly, die ich versuche, an eine WPF <ListBox> Database zu binden. Anfangs werden die Listenelemente ordnungsgemäß angezeigt, aber wenn ich der Liste <Foo> ein neues Element hinzufüge, fügt das Listenfeld kein Listenelement hinzu. Wie kann ich dem Listenfeld mitteilen, die Daten erneut zu binden/zu aktualisieren/zu aktualisieren und den neuen Artikel anzuzeigen?WPF-Datenbindungs-Handbuch Update
Antwort
Obwohl ein ObservableCollection ist der beste Weg, die eigentliche Frage zu beantworten, die Art und Weise manuell zu aktualisieren ist BindingExpression.UpdateTarget
Sie sollten stattdessen eine ObservableCollection verwenden, dann erhalten Sie automatisch Updates.
Kann ich eine ObservableCollection in einer Nicht-WPF-Assembly verwenden? – harriyott
Ja, wenn Sie PresentationBase einschließen (ich denke, die Klasse ist in System.Collections.ObjectModel, aber das Impl ist in PresetationBase); oder wenn Sie die gleiche Funktionalität erhalten möchten, erstellen Sie Ihre eigene ObservableCollection, indem Sie INotifyCollectionChanged implementieren. – Scott
Es ist in WindowsBase, und ich stimme zu. Es gibt normalerweise keinen Grund, etwas anderes als ICollection
Vielen Dank für diese Posting Antwort zu nennen. Auch wenn Sie ObservableCollection verwenden, müssen Sie möglicherweise BindingExpression.UpdateTarget verwenden. Dies kann der Fall sein, wenn sich die Sammlung nicht im UI-Thread befindet. Ich habe einige Multithread-WPF-Apps geschrieben, und ich merke, dass ich die Datenbindung entfernen muss, wenn ich Modellcode in einen anderen Thread verschiebe, weil ich nicht mit dem Update-System rechnen kann, um wirklich zu funktionieren. Während ich die Datenbindung für ein großartiges Konzept halte, glaube ich, dass die Undurchsichtigkeit des Datenbindungssystems ein echtes Hindernis für meine Übernahme war. (Sorry für die Tirade!) Danke nochmal, Adam.
- 1. svn update nicht update
- 2. ASP.NET Update: Update bedingte Störung
- 3. Update und Update funktioniert nicht
- 4. SQL - sequenzielle Update Problem - update die Aktualisierungsdatum
- 5. UPDATE Gleiche Zeile nach UPDATE in Trigger
- 6. Update Eltern Modell auf Kind Update
- 7. Leistungsprobleme mit UPDATE in AFTER UPDATE Auslöser
- 8. Update-Node & NPM VS Cordova Update 5
- 9. Update derselben Reihe nach Update-Trigger
- 10. UITextView Update
- 11. mit Update
- 12. Wenn ich die Update-Button klicken, wird es nicht/Update ändern (CodeIgniter, Update mehrere Zeilen)
- 13. ASP.Net: Asynchrones Update-Panel Laden mit zwei Update-Panels
- 14. Meine Update-Abfrage löst keine AFTER UPDATE-Trigger
- 15. MongoDB Update viele Dokumente mit verschiedenen Zeitstempeln in einem Update
- 16. Unterschied zwischen FOR UPDATE OF und FOR UPDATE
- 17. Wie das Verzeichnis für Komponisten --update-Schlüssel selbst Update
- 18. Sql Update Spalte von Spalte Update in einzelnen Anweisung
- 19. Android SQLite Datenbank-Update-Tabelle, wenn Update App
- 20. ng-repeat nicht update auf update von array
- 21. Überschreiben Update zu entweder Update oder Archivieren in Schienen
- 22. Mungo Pre-Update Haken - update Dokument funktioniert nicht
- 23. Probleme mit den Tasten nach Wordpress Update/Plugin Update
- 24. Update mehrere Zeilen mit Einzel Update SQL Server
- 25. Ein Update-Panel im Vergleich zu mehreren Update-Panels
- 26. Install4j Auto-Update - Verwenden der Update-Zeitplan-Registrierung
- 27. Batch-Update hat unerwartete Zeilenanzahl von Update (Spring/Hibernate) zurückgegeben
- 28. Angular 2 Update: keine gui Update nach asynchroner Dateneingabe
- 29. Aktualisiere Gridview außerhalb des Update Panels vom Update Panel
- 30. Tableview update 'NSInternalInconsistencyException', Grund: 'Ungültiges Update: ungültige Zeilenanzahl?
Haben Sie das im Szenario der Frage versucht? Der Grund, den ich stelle, ist, dass ich den Eindruck hatte, dass UpdateTarget die Liste nicht aktualisiert, wenn die Sammlung dieselbe Referenz ist (wenn Sie eine neue Sammlung erstellen, würde dies eine Neubindung erzwingen, oder wenn Sie zuerst die Quelle auf Null setzen). – Scott