如何实现分层数据绑定
本文关键字:分层 数据绑定 实现 何实现 | 更新日期: 2023-09-27 17:59:37
在这里学习WPF,我正试图了解分层数据绑定。
这就是我的处境:
public class A
{
public int Id { ... }
public IEnumerable<B> Children { ... }
}
public class B
{
public string SomeValue { ... }
}
我想要使用ItemsControl
来显示A
的集合,并且对于每次出现的A
,我想要内部ItemsControl
来显示A.Children
。
我以为这会奏效,但显然,我还有很多东西要学。。。
<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>
然后,在代码背后。。。
icCollectionOfAs.ItemsSource = createSomeAsWithChildBsInThem();
这一切的结果是什么都没有显示出来。为什么?
感谢
您不应该在XAML(ItemsSource="{Binding}"
)和代码隐藏(icCollectionOfAs.ItemsSource = createSomeAsWithChildBsInThem();
)中指定ItemsSource,XAML稍后可能会被调用。
其余的对我来说似乎很好,只是ID的TextBlock可能会隐藏在孩子们的ItemsControl后面,因为你使用的是没有行或列的网格,而不是StackPanel。