Windows Phone 7 - ListBox的动态项

时间:2012-05-15 15:29:35

标签: windows-phone-7 listbox

我想动态地在ListBox内创建每个项目的内容 - 将其视为项目列表。或者考虑带有联系人的电话簿应用程序,每个联系人都有一个或多个显示在名称下方的电话号码;名称是一个字段,电话号码是第二个字段。但是电话号码字段的内容显然取决于联系人的电话号码。

像:

Andrew Adams   <-- TextBlock for name
650-123-2222   <-- "Item" for numbers
490-222-3333

Benny Benjamin
650-123-3333

我试图通过为主ListBox项目中的数字项创建第二个ListBox来解决此问题。但我不知道如何使用C#中的模型填充第二个ListBox

   <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <StackPanel Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >

            <ListBox Name="ContactResultsData" ItemsSource="{Binding Contacts}" Margin="24,0" Height="620">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock Name="ContactName" Text="{Binding ContactName}" Style="{StaticResource PhoneTextLargeStyle}" />
                            <ListBox Name="NumbersList" ItemsSource="{Binding NumbersList}">
                                <TextBlock Name="Number" Text="{Binding Number}" Style="{StaticResource PhoneTextSmallStyle}" />
                            </ListBox>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </StackPanel>
    </Grid>
</Grid>

问题是:如何从C#设置NumbersList ItemsSource?或者我可以用其他更好的方法解决我的问题吗?

2 个答案:

答案 0 :(得分:1)

您需要为第二个ItemTemplate设置ListBox。它应该看起来像:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <StackPanel Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >

        <ListBox Name="ContactResultsData" ItemsSource="{Binding Contacts}" Margin="24,0" Height="620">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock Name="ContactName" Text="{Binding ContactName}" Style="{StaticResource PhoneTextLargeStyle}" />
                        <ListBox Name="NumbersList" ItemsSource="{Binding NumbersList}">
                            <ListBox.ItemTemplate>
                                <DataTemplate>
                                    <TextBlock Name="Number" Text="{Binding Number}" Style="{StaticResource PhoneTextSmallStyle}" />
                                </DataTemplate>
                            </ListBox.ItemTemplate>
                        </ListBox>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </StackPanel>
</Grid>

另外,请不要给出UI元素名称(Name或x:Name),除非您需要在xaml后面的代码中使用它们。对于ItemTemplate中的项目尤其如此。

答案 1 :(得分:0)

  • 内部不能直接包含
  • 如果NumbersList是IList或类似的,则无法绑定到“Number” - 只需使用{Binding}而不是