如何在数据绑定ListBox.ItemTemplate中绑定Silverlight ItemsControl?

时间:2009-11-24 23:02:50

标签: silverlight wcf-binding

我正在编写一个Silverlight应用程序。我想要一个垂直显示行的列表框。然后对于每一行,该行上应该有一个标题列,然后是一个水平的面板列表。我找到了布局。我的问题在于数据绑定。

ListBox绑定到一个集合。该集合中的每个项目都是列表框中的一行。集合中的每个项目都有一个集合,它将绑定到每个ListBox行中的ItemsControl ItemsSource。

例如

[报头] [X] [Y] [Z] [报头] [X2] [Y2] [Z2] [报头] [X3的] [Y3] [Z3]

我需要使用的绑定语法是什么?

<ListBox Name="listRuleSteps" Height="150" Loaded="ListBox_Loaded" ScrollViewer.VerticalScrollBarVisibility="Auto">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="150"></ColumnDefinition>
                            <ColumnDefinition></ColumnDefinition>
                        </Grid.ColumnDefinitions>
                        <StackPanel Grid.Column="0" Orientation="Vertical" Height="50">
                            <dataInput:Label Content="{Binding StepID}"></dataInput:Label>
                        </StackPanel>

                        <StackPanel Grid.Column="1" Orientation="Vertical">
                            <ItemsControl ItemsSource="{Binding SelectedItem.RuleEngineParts, ElementName=listRuleSteps}" >
                                <ItemsControl.ItemsPanel>
                                    <ItemsPanelTemplate>
                                        <controlToolkit:WrapPanel Orientation="Horizontal" />
                                    </ItemsPanelTemplate>
                                </ItemsControl.ItemsPanel>
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <controlToolkit:WrapPanel Width="100">
                                            <dataInput:Label Content="Text1"></dataInput:Label>
                                        </controlToolkit:WrapPanel>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>

                            </ItemsControl>                           

                        </StackPanel>
                    </Grid>
                </DataTemplate>

            </ListBox.ItemTemplate>
        </ListBox>

我认为问题出在这条线上。我显然不想使用SelectedItem,但我不确定绑定ItemsSource是什么。

<ItemsControl ItemsSource="{Binding SelectedItem.RuleEngineParts, ElementName=listRuleSteps}" >

如果您认为我这样做完全错了,请告诉我。我是Silverlight的新手。

1 个答案:

答案 0 :(得分:1)

首先,我认为这里不需要datainput:Label控件,在TextBlock属性上绑定的简单Text在没有额外行李的情况下也可以正常工作。< / p>

在内部ItemsControl中,您可以像这样绑定: -

<ItemsControl ItemsSource="{Binding RuleEngineParts}"

现在,您可以将内部TextBlock s Text属性绑定到RuleEngineParts集合中找到的对象的相应属性。