Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error: Items collection must be empty before using ItemsSource

my xaml file

<ListBox Height="522" HorizontalAlignment="Left" Margin="20,162,0,0" Name="listBox1" VerticalAlignment="Top" Width="448" ItemsSource="{Binding}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Text}" Foreground="#FFC8AB14" FontSize="36" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

xaml.cs file

       listBox1.Items.Clear();
       for (int i = 0; i < tasks.Count(); i++) {
            List<Taskonlistbox> dataSource = new List<Taskonlistbox>();
            dataSource.Add(new Taskonlistbox() {Text = "Blalalalala"} );
            this.listBox1.ItemsSource = dataSource; // visual stdio shows error here:
        }

Taskonlistbox:

public class Taskonlistbox
{
    public string Text { get; set; }
}

Error: "Items collection must be empty before using ItemsSource" whats a problem?

like image 800
Alexander V. Avatar asked Feb 12 '12 18:02

Alexander V.


1 Answers

You want to create the list only once and assign the data source only once! Therefore, create the list before the loop and assign the data source after the loop

// Clear the listbox.
// If you never add items with listBox1.Items.Add(item); you can drop this statement.
listBox1.Items.Clear();

// Create the list once.
List<Taskonlistbox> dataSource = new List<Taskonlistbox>(); 

// Loop through the tasks and add items to the list.
for (int i = 0; i < tasks.Count(); i++) { 
    dataSource.Add(new Taskonlistbox {Text = "Blalalalala"} ); 
}

// Assign the list to the `ItemsSouce` of the listbox once.
this.listBox1.ItemsSource = dataSource;
like image 191
Olivier Jacot-Descombes Avatar answered Oct 17 '22 14:10

Olivier Jacot-Descombes