如何混合Grid列和ItemsControl功能?

时间:2010-10-19 12:21:12

标签: wpf wpf-controls

我正在寻找简单的方法来创建Listbox / ListView / ItemsControl,其中每个项目都是Grid的行。

我有简单的树结构(深度= 3)

Group
   -> Question1
       ->Answer11
       ->Answer12
   -> Question2
       ->Answer21
       ->Answer22
       ->Answer23

我希望将其呈现为表格。

QUestion1 | Answer11 | Answer12 | -
Question2 | Answer21 | Answer22 | Answer23

正如您所看到的,在运行时已知列数。最简单的方法是什么?我已经尝试混合ListView和GridView,但我在绑定嵌套的列的答案时遇到了一些问题。在使用MVVM的XAML中,还有其他简单的方法吗?

1 个答案:

答案 0 :(得分:0)

你可以这样做。

<ListBox x:Name="listbox" ItemsSource="{Binding Questions}">
        <ListBox.ItemTemplate>
            <DataTemplate DataType="{x:Type local:Question}">
                <StackPanel Orientation="Horizontal">
                <TextBlock Width="100" Text="{Binding QuestionText}" />
                    <ItemsControl ItemsSource="{Binding Answers}">
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <StackPanel Orientation="Horizontal" />
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                        <ItemsControl.ItemTemplate>
                            <DataTemplate DataType="{x:Type local:Answer}">
                                <TextBlock Width="100" Text="{Binding Text}" />
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

这会创建问题列表(问题文本为第一列),问题答案为问题文本右侧的水平列表。

这假设您的问题和答案是可绑定的属性。这也不是一个真正的“网格”,但如果它看起来像一个表就足够了,它可以工作。