0

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

喜欢:

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

Benny Benjamin
650-123-3333

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

   <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>

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

4

2 回答 2

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>

附带说明一下,除非您需要在代码中或从 xaml 中使用它们,否则不要给您的 UI 元素名称(名称或 x:Name)。对于 ItemTemplate 中的项目尤其如此。

于 2012-05-15T16:12:40.093 回答
0
  • 内部不能直接包含
  • 如果 NumbersList 是 IList 或类似的,那么您不能绑定到“Number” - 只需使用 {Binding} 代替
于 2012-05-15T15:42:46.040 回答