如何实现分层数据绑定

本文关键字:分层 数据绑定 实现 何实现 | 更新日期: 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。