在wpf中对observablecollection进行数据绑定,并以特殊顺序填充gui

时间:2012-05-16 01:30:28

标签: wpf xaml data-binding collections itemscontrol

我正在尝试使用数据绑定尽可能多地创建我的gui。我有收集的频道,也有步骤列表。我所知道的是将这些集合绑定到xaml元素并按以下顺序显示它们:

Channel1 step1 step2 step3 step4
Channel2 step1 step2 step3 step4

我尝试使用嵌套的ItemsControls:

<ItemsControl ItemsSource="{Binding Path=channels}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <ItemsControl ItemsSource="{Binding Path=steps}">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                             <GUI:stepAnalog></GUI:stepAnalog>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

但我所取得的成就就像命令元素一样:

channel1 step1 step2 step3 channel2 step1 step2 step3

channel1
step1
step2
step3
channel2
step1
step2
step3

wpf中是否存在仅使用数据绑定的解决方案,还是我必须通过迭代元素并将其放置来以编程方式执行此操作?

1 个答案:

答案 0 :(得分:1)

Theres总是一个解决方案,只需要找到合适的解决方案!

我建议您使用ItemsControls的ItemsPanel,如下所示:

<ItemsControl ItemsSource="{Binding Path=channels}"> 
        <!-- This specifies that the items in the top level items control should be stacked vertically-->
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Vertical"/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate> 
    <DataTemplate> 
            <ItemsControl ItemsSource="{Binding Path=steps}"> 
                <!-- This specifies that the items in the second level items control should be stacked horizontally-->
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel Orientation="Horizontal" />
                    </ItemsPanelTemplate>               
                </ItemsControl.ItemsPanel>
                <ItemsControl.ItemTemplate> 
                     <DataTemplate> 
                         <GUI:stepAnalog></GUI:stepAnalog> 
                    </DataTemplate> 
                </ItemsControl.ItemTemplate> 
            </ItemsControl> 
    </DataTemplate> 
</ItemsControl.ItemTemplate> 

这允许您指定项目控件中的项目的布局方式,您仍然可以使用DataTemplate来定义它们的显示方式