[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."
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" 
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 :