views:

198

answers:

1

Hi

I have a an array of observable collections and I want to display all these collections in a single list box. The data in each of these collections are of the same type and they have been separated on the basis of a particular category.

So my question is, is it possible for the DataTemplate of a listbox to contain a Listbox?

+1  A: 

Yes, as an example, the Xaml:

<UserControl x:Class="SilverlightApplication1.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300">
    <Grid x:Name="LayoutRoot" Background="White">
        <ListBox ItemsSource="{Binding }">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel >
                        <TextBlock Text="{Binding Name}" />
                        <ListBox ItemsSource="{Binding InnerList}">
                            <TextBlock Text="{Binding }" />
                        </ListBox>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</UserControl>

The Code:

using System.Collections.Generic;
using System.Windows.Controls;

namespace SilverlightApplication1
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
            this.DataContext = new List<Data>() 
            { 
                new Data(){Name = "First"},
                new Data(){Name = "Second"},
                new Data(){Name = "Third"},
                new Data(){Name = "FourthWithDifferentData", InnerList=new List<string>(){"a", "b", "c"}}
            };
        }
    }
}

public class Data
{
    public List<string> InnerList { get; set; }
    public string Name { get; set; }
    public Data()
    {
        InnerList = new List<string>(){"String1", "String2", "String3"};
    }
}
mattmanser