WPF ObservableCollection & lt; T & gt; vs BindingList & lt; T & gt;
Dans mon application WPF, j'ai un XamDataGrid. La grille est liée à une ObservableCollection. J'ai besoin de permettre aux utilisateurs d'insérer de nouvelles lignes dans la grille, mais il s'avère que, pour l' "Ajouter une Nouvelle Ligne" ligne disponibles, le xamDataGrid de la source doit mettre en œuvre IBindingList. ObservableCollection ne pas implémenter cette interface.
Si je change de source à une BindingList, cela fonctionne bien. Cependant, de ce que je peux comprendre en lisant sur ce sujet, BindingList est vraiment un WinForms chose et n'est pas entièrement pris en charge dans WPF.
Serais-je faire une erreur si j'ai changé tous mes ObservableCollections à BindingLists? Quelqu'un a d'autres suggestions quant à la façon que je peux obtenir à ajouter une nouvelle ligne, une fonctionnalité pour mon xamDataGrid tout en gardant la source comme une ObservableCollection? Il me fait comprendre qu'il y a un certain nombre de grilles différentes qui nécessitent IBindingList à être mis en œuvre afin de soutenir ajouter une nouvelle ligne, les fonctionnalités, mais la plupart des solutions que je vois sont de passer la BindingList.
Grâce.
source d'informationauteur Flack
Vous devez vous connecter pour publier un commentaire.
La IBindingList interface et BindingList classe sont définies dans le Système.ComponentModel espace de noms, et ne sont donc pas strictement Windows Forms liés.
Avez-vous vérifié est xamGrid prend en charge la liaison à un ICollectionView source? Si oui, vous pouvez exposer vos sources de données à l'aide de cette interface et à l'arrière à l'aide d'un BindingListCollectionView.
Vous pouvez également créer une sous-classe de
ObservableCollection<T>
et de mettre en œuvre l'interface IBindingList:Alternativement, vous pouvez sous-classe
BindingList<T>
et de mettre en œuvre la INotifyCollectionChanged interface.Je ne suis pas familier avec IBindingList, mais j'aurais probablement l'approche de l'écriture d'un adaptateur et/ou de l'extension de la classe qui s'adapte à un ObservableCollection à un IBindingList. De cette façon, vous pouvez garder votre familier ObservableCollection code (et de l'utiliser aussi dans d'autres endroits en dehors de la Infragistic DataGrid).
Je pense que vous êtes hors de la chance. IBindingList de ne pas être totalement pris en charge par la grille, de sorte que vous allez perdre des choses comme le tri, je crois. Mais l'OC n'est pas faire l'AddNew comportement.
Je ne voudrais pas utiliser IBindingList, je serais probablement juste ajouter un bouton pour insérer un nouvel élément dans la liste, puis de définir la grille pour modifier cet élément.
Ceux lien de l'aide ?
http://xceed.com/CS/blogs/dontpanic/archive/2009/04/01/i-notify-we-notify-we-all-wait-no-we-don-t.aspx (très utile, même si étiqueté comme "Xceed" 😉
ObservableCollection(T) vs BindingList(T)?
Si vous pouvez mettre à niveau vers NetAdvantage 2011, Volume 2 ajouter un nouveau record de travailler quand il est lié à une ObservableCollection.
Si vous utilisez NetAdvantage 2011 Volume 1 ou plus, alors la XamDataGrid prend également en charge la IEditableCollectionView de l'interface lors de son CanAddNew propriété renvoie la valeur true. Vous pouvez utiliser un ListCollectionView en lui donnant l'exemple de votre ObservableCollection et puis de lier la XamDataGrid à la ListCollectionView.
Vous pouvez également utiliser la suggestion précédente de dérivation de ObservableCollection et la mise en œuvre de IBindingList sur votre classe dérivée.