Michael
Michael

Reputation: 1607

Binding a ListBox to the elements of a collection in a collection

I have some problems binding a ListBox to the elements of a collection in a collection.. Let me explain:

I have a collection, ObservableCollection<Test> named testsCollection. Every test contains an ObservableCollection<LogEvent> named LogEvents. Every LogEvent has a Message that I need to display in the ListBox.

I need to display every "Message" in every "LogEvent" in every "Test". It has to be displayed in a flat list so I'm using a ListBox.

Here's a summary of what I tried:

DataContext = testCollection; // testCollection is an ObservableCollection<Test>

The I put this in the XAML:

<ListBox ItemsSource="{Binding LogEvents}" ItemTemplate="{StaticResource stepItemTemplate}">

Finally, here's the ItemTemplate, stepItemTemplate:

<DataTemplate x:Key="stepItemTemplate">
    <TextBlock Text="{Binding Message}"></TextBlock>
</DataTemplate>

This "works" but it only displays the Messages in the LogEvents of the first Test. But I need to display every Messages of every LogEvent of every Test.. And I don't know what to try anymore :(

Upvotes: 0

Views: 62

Answers (1)

Sajeetharan
Sajeetharan

Reputation: 222522

You should Usser ItemsControl when you want to bind a scenario like this

<ListBox ItemsSource="{Binding testsCollection}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding Message}" FontSize="20" />
                    <ItemsControl ItemsSource="{Binding LogEvents}" Margin="0 20 0 0">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Border BorderBrush="Blue" BorderThickness="2">
                                <TextBlock Text="{Binding Message}" FontSize="20" />
                            </Border>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>

            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>

Upvotes: 1

Related Questions