如何使用子集合创建父元素集合

时间:2012-04-02 06:44:32

标签: wpf xaml

我对标记并不熟悉。我尝试用它来DataTemplate测试TreeView。基本上我正在尝试创建一个名为parents的列表,向其中添加2个元素,然后创建两个子节点并将它们添加到列表中的一个父节点,最后将父节点列表绑定到{{1 }}。但我无法弄清楚如何在列表中引用TreeView。现在我想我不应该浪费我的时间与xaml,并应该在代码背后做到这一点。有什么想法吗?

p1, p2

这两个类:

<Window.Resources>
    <local:Parent Name="Parent 1" x:Key="p1"/>
    <local:Parent Name="Parent 2" x:Key="p2"/>
    <x:ArrayExtension Type="local:Parent" x:Key="parents">
        <!-- Can't refer p1 and p2 from here :( -->        
    </x:ArrayExtension>

    <local:Child ChildName="Child 1" Parent="{StaticResource ResourceKey=p1}"/>
    <local:Child ChildName="Child 1" Parent="{StaticResource ResourceKey=p1}"/>
</Window.Resources>

<Grid>
    <StackPanel VerticalAlignment="Center">
        <TreeView ItemsSource="{Binding Source={StaticResource ResourceKey=p1}}" />
    </StackPanel>
</Grid>

1 个答案:

答案 0 :(得分:1)

  1. 无需将TreeView放入StackPanelStackPanel堆叠元素,但在您的情况下,其中只有一个元素 - TreeView
  2. 您需要为HierarchicalDataTemplate定义TreeView。这是一个例子:

  3. <HierarchicalDataTemplate x:Key="TreeViewTemplate" ItemsSource="{Binding Children}" >
        <!--  Some markup here -->
    </ HierarchicalDataTemplate>
    

    这里ItemsSource属性告诉绑定数据中的哪些属性包含当前节点的子集合。它以递归方式应用于该孩子的每个孩子和每个孩子,依此类推。


    最后,关于在xaml中定义数据。有几种方法,但在这种情况下,我宁愿从Parent派生ParentTest并创建填充儿童集合的默认c'tor。