Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Thomas Lebrun

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

[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

- [Refactoring] ReSharper pour Visual Studio 2010 (Preview) par Thomas Jaskula le il y a 4 heures et 20 minutes

- [Refactoring] Analyser vos exceptions avec ReSharper Exceptional par Thomas Jaskula le il y a 5 heures et 34 minutes

- SharePoint 2007 : patterns & practices SharePoint Guidance par Philippe Sentenac [MVP SharePoint] le il y a 19 heures et 13 minutes

- [Visual Studio 2010] Les tests cases c’est bien, mais je vais devoir tout réécrire ? par Etienne Margraff le il y a 20 heures et 10 minutes

- MVP[Gribouillon].AddYear par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le il y a 20 heures et 25 minutes

- Clinique INSIA - Projet de fin d’Etudes (Silverlight 3 MVVM et OutOfBrowser, WCF, TFS) - Part 1 par David REI le 07-02-2009, 23:38

- C’est la crise ? Bah pourquoi cramer du budget pub alors ? par Nix's Blog le 07-02-2009, 15:31

- Soyons MVP ! par TheSaib .NET blog le 07-02-2009, 12:15

- SharePoint : Gestion des Erreurs 6398, 7076 et 6482 par Blog Technique de Romelard Fabrice le 07-02-2009, 11:53

- EF avec WPF par Matthieu MEZIL le 07-02-2009, 10:18