Reputation: 1742
Learning WPF here and I'm trying to get my head around hierarchical data binding.
This is my situation:
public class A
{
public int Id { ... }
public IEnumerable<B> Children { ... }
}
public class B
{
public string SomeValue { ... }
}
I want to use a ItemsControl
to display a collection of A
and for each occurance of A
I want an inner ItemsControl
to display A.Children
.
I thought this would do the trick but, apparently, I have much to learn yet...
<ItemsControl x:Name="icCollectionOfAs" ItemsSource="{Binding}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Width="auto" Height="auto">
<TextBlock Text="{Binding Id}" />
<ItemsControl ItemsSource="{Binding Children}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding SomeValue}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Then, in code-behind...
icCollectionOfAs.ItemsSource = createSomeAsWithChildBsInThem();
The result of all this is nothing gets shown. Why?
Thanks
Upvotes: 0
Views: 876
Reputation: 184476
You should not specify the ItemsSource both in XAML (ItemsSource="{Binding}"
) and code behind (icCollectionOfAs.ItemsSource = createSomeAsWithChildBsInThem();
) the XAML might have been called later.
The rest seems fine to me except that the TextBlock for the ID will probably be hidden behind the ItemsControl for the children as you use a Grid without rows or columns rather than a StackPanel.
Upvotes: 2