2011-12-12 9 views
7

ユーザーがリストボックスの最下部に移動したときに怠けた "load more"アイテムを実装しようとしていますが、リストボックスに新しいアイテムを追加しようとするたびに、これは操作は読み取り専用コレクションではサポートされていません。C#wp7

"読み取り専用コレクションではサポートされていません。"

私はすでにフォーラムやブログからいくつかのソリューションを試してみましたが、どれもうまくいかないようです。私は少し奇妙な問題の背後にある論理を理解することさえできません。

基本的には、アイテムのリストを読み込んで、リストボックスのアイテムソースとして割り当てています。

wineFilterListBox.ItemsSource = wines; 

ユーザーがリストの一番下になると、私は(ちょうどWP7用Twitterアプリのように)より多くの項目を追加

public ObservableCollection<Wine> wines; 
... 

    if (atBottom) 
    { 
     int Count = page.wineFilterListBox.Items.Count; 
     int end = Count + 10; 
     for (int i = Count; i < end; i++) 
     { 
      page.LoadWineList(Count); 
     } 
    } 
... 

    private void LoadWineList(int Count = 1) 
    { 
    ... 
     wineFilterListBox.Items.Add(wines); 
    } 

答えて

9

あなたがItemSourceを使用する場合Itemsコレクションが読み取り専用になります。 ListBoxItemsプロパティではなく、コレクションにデータを追加する必要があるようです。特にItemsControl.ItemSource Property

、このセクション:ItemsSourceプロパティが設定されている場合

、Itemsコレクションが読み取り専用および固定サイズとされ

はMSDNを参照してください。あなたのコレクションは `のObservableCollection"であることから、直接winesコレクションに項目を追加する

試してみてください。

あなたは変動するよう INotifyCollectionChangedインターフェイスを実装するオブジェクトへのItemsSourceを設定する必要がありますコレクション はItemsControlに反映されます。 ObservableCollection(Of T) クラスは、このようなオブジェクトを定義します。あなたが意図的にItemsSource を設定するためにObservableCollectionを使用したくない場合は

+0

おかげなっていないためにあなたのwineFilterListBox.Items

for (int i = Count; i < 10; i++) { wineFilterListBox.Items.Add(new Wine()); } 

この原因に手動wineFilterListBox.ItemsWineを追加することができます。最後の行を削除するとそれが実行されました。 "wineFilterListBox.Items.Add(ワイン);" ObservableCollectionを使用している間、私は基本的に見逃してしまったソリューションをたくさん試しました。ワインリストに追加するだけで、リストボックスを更新することができました。 –

+0

@ BrunoNunes:問題ありません!いつも私たちを得る小さな事柄です:-) –

関連する問題