2010-11-30 13 views
0

J'essaie de supprimer certains objets d'un ListBox que j'ai créé, et pour une raison quelconque, ListBox.Items.IsReadOnly est vrai.Pourquoi ListBox.Items.IsReadOnly = true? (F #/Silverlight)

Les appels suivants ne fonctionnent pas:

myListBox.Items.Add("whatever") 
myListBox.Items.Add("stuff") 
myListBox.Items.Remove("whatever") 

Je reçois une exception:

{System.InvalidOperationException: Operation not supported on read-only collection. 
    at System.Windows.Controls.ItemCollection.RemoveImpl(Object value) 
    at System.Windows.Controls.ItemCollection.RemoveInternal(Object value) 
    at System.Windows.PresentationFrameworkCollection`1.Remove(T value) 

je peux mettre ListBox.ItemsSource, mais travailler avec .Items est beaucoup plus facile. Je suis en train de créer le ListBox comme ceci:

let mutable myListBox= new ListBox() 

Toutes les idées/suggestions seraient grandement appréciées. Merci.

Répondre

3

Je ne suis pas sûr de la syntaxe F #, mais vous devez définir le ListBox.ItemsSource.

Si vous créez un ObservableCollection puis que vous le définissez sur le ItemsSource, vous pouvez ajouter et supprimer des éléments de la collection et la zone de liste sera mise à jour automatiquement.

+0

Je vais essayer ... c'est étrange, parce que dans C# Items.Remove/Items.RemoveAt semblent fonctionner: http://stackoverflow.com/questions/1400091/search-and-remove-item-from- listbox –

+0

@Mike - D'accord, c'est étrange, mais je ne suis pas assez familier avec F # pour pouvoir dire pourquoi c'est différent. – ChrisF

+0

J'ai travaillé en créant une nouvelle ObservableCollection, en l'assignant en tant que ItemsSource sur ma ListBox, puis en la manipulant au lieu d'Items. Je ne sais toujours pas pourquoi les éléments sont en lecture seule, mais bon, cela fonctionne. Merci. –

2

Le code suivant fonctionne bien pour moi:

open System.Windows.Controls 
let l = ListBox() 
l.Items.Add("An item") 
l.Items.Add("Another item") 
l.Items.Remove("An item") 

fais-tu quelque chose d'autre entre la création de la zone de liste et de tenter d'ajouter des éléments?

+0

Autre que l'attribution de certaines propriétés de la ListBox (hauteur, etc), non. –