2010-06-30 7 views
2

Je m'excuse pour le roman mais je voulais expliquer autant que j'ai fait jusqu'à présent. Dans mon projet actuel, j'ai une application qui consomme un service qui fournit une collection en tant que <List>. En raison de la façon dont j'utilise ces données dans l'application, j'ai dû convertir ces données en une collection observable. Cela a été fait pour que les mises à jour de l'interface utilisateur de l'application soient actualisées à mesure que les données étaient sélectionnées et déplacées à l'aide de INotifyPropertyChanged et INotifyCollectionChanged. Où j'ai un défi maintenant est que j'ai une zone de liste qui est liée à la collection observable dans la zone de liste J'ai un datatemplate qui restitue les éléments de la collection. Ce modèle de données contient un bouton qui doit permettre à l'utilisateur de cliquer sur le bouton de chaque élément pour les supprimer de la collection. Le cas d'utilisation de ceci est une zone de liste qui stocke le nom sélectionné comme choisi dans une grille. Une fois que l'utilisateur a sélectionné des noms à partir de la grille, ils sont stockés (dans la collection observable en tant que file d'attente) et rendus dans l'interface utilisateur dans un contrôle listbox qui affiche tous les noms sélectionnés. Je dois fournir à l'utilisateur la possibilité de supprimer ces noms dans n'importe quel ordre sélectionné. D'après ce que j'ai lu il n'y a aucun moyen d'énumérer/indexer une collection observable. Pour des situations comme celle-ci, vous devriez utiliser List ou un tableau. Cependant, pour que les éléments soient actualisés dans la vue de liste, ils doivent être dans une collection observable. D'après ce que j'ai lu, il apparaît que lorsque l'événement est déclenché, j'ai besoin de convertir la collection observable en un tableau, puis évaluer le tableau pour déterminer l'index, puis supprimer l'enregistrement en conséquence?Comment faire pour supprimer des éléments d'une collection Observable

Je pense que je peux être hors base sur ce sujet car il semble que je suis sur l'ingénierie de ce problème? Le scénario ci-dessus ne semble pas correct parce que je suis tombé comme si je faisais beaucoup de conversion vers et à partir des collections pour simplement supprimer un enregistrement? Est-ce que quelqu'un sait d'un moyen efficace pour supprimer des enregistrements d'une collection (dans n'importe quel ordre sélectionné) lorsque la collection est rendue comme un contrôle d'éléments dans une zone de liste? J'ai réussi à supprimer le dernier enregistrement ajouté à la collection en utilisant RemoveAt(), mais je n'ai pas réussi à supprimer des enregistrements de façon aléatoire.

Afterthought: Une partie de cette question pourrait être liée au fait que j'ai un bouton inséré dans le DataTemplate (point de contrôle) et par conséquent l'élément n'est pas réellement sélectionné avant l'événement est déclenché sur le bouton un événement? Désolé pour le décousu, mais j'ai eu la tête pendant des heures et j'ai fait des progrès mineurs. Tous les conseils ou idées seraient appréciés!

+3

Cette question est beaucoup trop radicale-y. Vous ferez justice si vous pouvez réduire à une question réelle. Et pour info, je n'ai aucune idée où vous lisez, vous ne pouvez pas indexer ou énumérer une ObservableCollection. Bien sûr vous pouvez, il a toutes les méthodes ICollection '(IndexOf, un indexeur d'article, etc). –

+0

Merci Adam et ouais désolé pour le long roman. J'ai essayé de donner une question trop descriptive et il est sorti plus confus que concis. merci encore pour les conseils sur ICollection – rlcrews

Répondre

5

ObservableCollection<T> hérite de Collection<T> qui implémente IList<T>, donc vous pouvez certainement l'indexer et l'énumérer. Il a une méthode Remove qui prend l'objet pour supprimer et supprime la première occurrence dans la collection et une méthode RemoveAt qui prend un index et supprime l'élément à cet index. Basé sur votre réflexion après coup, il semble que vous ayez un ListBox WPF avec un ItemTemplate qui crée un bouton. ListBox définira le DataContext de chaque modèle instancié à l'élément dans la liste liée, afin que vous puissiez obtenir une référence à l'élément qui a créé un bouton à partir de la propriété DataContext sur le bouton ou à l'aide d'une liaison.

+0

Merci Quarermeister. Après quelques recherches supplémentaires, je suis retourné et retravaillé le modèle et retiré le bouton du modèle. Cela m'a permis d'utiliser SelectedItem du contrôle et j'ai déplacé le bouton sous la liste. Bien qu'un peu differnt visuellement. Cela fonctionne sans problèmes. Merci pour le conseil. – rlcrews

Questions connexes