WPF ObservableCollection<T> vs BindingList<T>
In meiner WPF-Anwendung habe ich ein XamDataGrid. Das raster ist gebunden an eine ObservableCollection. Ich brauche, um Benutzern zu erlauben, fügen Sie neue Zeilen durch das Gitter, aber es stellt sich heraus, dass, um für die "Add New Row" - Zeile verfügbar ist, die xamDataGrid die Quelle muss IBindingList implementieren. ObservableCollection implementiert nicht die Schnittstelle.
Wenn ich meine Quelle eine BindingList, funktioniert es. Aber von dem, was ich verstehen kann, aus der Lektüre bis zu diesem Thema, BindingList ist wirklich eine WinForms-Sache, und wird nicht vollständig unterstützt in WPF.
Würde ich damit einen Fehler, wenn ich änderte alle meine ObservableCollections zu BindingLists? Hat jemand noch andere Vorschläge, wie ich kann hinzufügen neue Zeile Funktionalität für meine xamDataGrid, während die source-als ObservableCollection? Es ist mein Verständnis, dass es gibt eine Reihe von verschiedenen Netze erfordern, dass der IBindingList implementiert werden, um zu unterstützen, fügen Sie neue Reihe an Funktionen, aber die meisten Lösungen, die ich sehe sind, wechseln Sie einfach auf die BindingList.
Dank.
- Was ist ein XamDatagrid in den ersten Platz ? Meinst du das WPF-toolkit datagrid ? eine Dritte Komponente ? Können Sie bitte auch nach etwas Beispielcode 🙂
- Es ist Infragistic version des Datagrid
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den IBindingList - Schnittstelle und BindingList Klasse im System definiert sind.ComponentModel-namespace, und so sind nicht unbedingt Windows Forms Verwandte.
Haben Sie überprüft, ist xamGrid unterstützt die Bindung an eine ICollectionView Quelle? Wenn dem so ist, könnten Sie setzen Ihre Daten-Quellen über diese Schnittstelle, und sichern Sie es mit einem BindingListCollectionView.
Könnte man auch erstellen Sie eine Unterklasse von
ObservableCollection<T>
und Implementierung der IBindingList-Schnittstelle:Alternativ könnte Unterklasse
BindingList<T>
und Umsetzung der INotifyCollectionChanged - Schnittstelle.Ich bin nicht vertraut mit IBindingList, aber ich würde wahrscheinlich nehmen Sie den Ansatz, einen adapter schreiben und/oder extension der Klasse, die sich eine ObservableCollection, um eine IBindingList. Auf diese Weise können Sie halten Sie Ihr vertraut ObservableCollection-code (und auch in anderen Orten außer den Infragistic DataGrid).
Ich glaube, du bist kein Glück, so oder so. IBindingList nicht voll unterstützt werden, durch das Gitter, so verlieren Sie Dinge wie Sortieren ich glaube. Aber OC nicht tun, die AddNew-Verhalten.
Ich würde es nicht verwenden IBindingList, ich würde wahrscheinlich einfach fügen Sie eine Schaltfläche zum einfügen eines neuen Elements in der Liste und legen Sie dann die Gitter zu Bearbeiten, dass Element.
Hätte diese link helfen ?
http://xceed.com/CS/blogs/dontpanic/archive/2009/04/01/i-notify-we-notify-we-all-wait-no-we-don-t.aspx (sehr nützlich, auch wenn die Kennzeichnung als "Xceed" 😉
ObservableCollection(Of T) vs BindingList(Of T)?
Wenn Sie ein upgrade auf NetAdvantage 2011 Band 2 die neuen Datensatz hinzufügen-funktioniert, wenn gebunden an eine ObservableCollection.
Wenn Sie mit NetAdvantage 2011 Band 1 oder älter, dann die XamDataGrid unterstützt auch die IEditableCollectionView-Schnittstelle, wenn seine CanAddNew-Eigenschaft den Wert true zurück. Könnte man eine ListCollectionView gibt es die Instanz der ObservableCollection binden und anschließend die XamDataGrid der ListCollectionView.
Konnte man auch mit dem früheren Vorschlag der Ableitung von ObservableCollection und Implementierung von IBindingList auf die abgeleitete Klasse.