Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Thomas Lebrun

Tout sur WPF, LINQ, C# et .NET en général !

Actualités

[WPF] Comment ajouter un élément à un ItemsControl dont la propriété ItemsSource a été spécifiée ?

Il est très fréquent que l'on ait besoin, dans son programme, d'ajouter un élément à un ItemsControl (ListBox, ComboBox, etc...). Cela se passe très bien si vous avez indiqué les différents éléments du contrôle mais si vous êtes passé par la propriété ItemsSource, vous risquez d'être vite déçu.

En effet, le code suivant compile

ComboBoxItem item = new ComboBoxItem

                        {

                            Content = "Hello World"

                        };

 

this.cb.Items.Add(item);

Mais il déclenche une exception à l'exécution:

"Operation is not valid while ItemsSource is in use. Access and modify elements with ItemsControl.ItemsSource instead."

image

En effet, si l'on regarde la MSDN à propos de la propriété ItemsSource, voici ce que l'on peut y voir:

"When the ItemsSource property is set, the Items collection is made read-only and fixed-size."

Heureusement, il est possible de contourner ce "problème" pour arriver à ajouter notre élément manuellement.

La solution consiste tout simplement à accéder à l'objet de type IEnumerable que vous avez assigné à la propriété ItemsSource et à ajouter, sur cet objet, votre nouvel élément. Soit, par le code:

if (this.cb.ItemsSource != null)

{

    Photo p = new Photo

                  {

                      Name = "Hello World"

                  };

 

    ((ObservableCollection<Photo>) this.cb.ItemsSource).Add(p);

 

    this.cb.SelectedIndex = this.cb.Items .Count - 1;

}

De cette façon, plus aucuns problèmes ne survient mais il vous faudra faire attention à appliquer un éventuel filtre lorsque vous tenterez d'accéder à la collection car sinon, vous risquez de vous retrouver avec cet élément "temporaire" Wink

 

A+

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: mardi 29 juillet 2008 09:49 par Thomas LEBRUN
Classé sous : ,

Commentaires

richardc a dit :

Personnellement, je me demande à quoi sert Items ;-)

# juillet 29, 2008 12:22

Julien Corioland a dit :

Je cherchais justement à faire ça ce weekend...La solution tombe à pic ! Merci :)

# juillet 30, 2008 13:16

Thomas LEBRUN a dit :

@Richard: Items doit servir aux mélancoliques des WindowsForms :)

# août 1, 2008 23:45
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- [Silverlight] En attendant Silverlight 2 RTW par Blog Technique d'Audrey PETIT le il y a 17 heures et 24 minutes

- Le nouveau Gojira, c’est pour lundi… par CoqBlog le 10-11-2008, 01:18

- SharePoint : nouvel article sur la mise en place des Scopes dans MOSS Searchs par Blog Technique de Romelard Fabrice le 10-10-2008, 17:52

- Hello CS par Le Blog de julz le 10-10-2008, 12:26

- MSDN/TechNet/Microsoft Days Tour 2008 à Lille les 13 et 14 Octobre ! par RedoBlog - The .NET Gentleman !!! le 10-10-2008, 09:35

- MVC Pratique #07 - Un projet concret et le transfert des objets avec les ModelBinders par #Rui le 10-09-2008, 23:39

- SQL Server 2008 : Certifié - TS Admin (70-432) par SQL Server vu par Christian Robert le 10-09-2008, 10:58

- [WPF] Comment changer la couleur utilisée pour sélectionner les éléments d’un ItemsControl ? par Thomas Lebrun le 10-09-2008, 10:49

- Hello World! par Hamid's Place le 10-08-2008, 23:38

- SQL Profiler - Configuration pour un développeur - tracer les requêtes SQL de votre application par Atteint de JavaScriptite Aiguë [Cyril Durand] le 10-08-2008, 15:52