Windows phone 7 Windows Phone 7-列表框的动态项目

Windows phone 7 Windows Phone 7-列表框的动态项目,windows-phone-7,listbox,Windows Phone 7,Listbox,我想动态地在列表框中创建每个项目的内容-将其视为一个项目列表。或者设想一个带有联系人的电话簿应用程序,每个联系人都有一个或多个电话号码显示在姓名下方;姓名是一个字段,电话号码是第二个字段。但是电话号码字段的内容显然取决于联系人的电话号码 比如: 问题是:如何设置NumbersListitemsource from C#?或者我可以用其他更好的方法来解决我的问题 内部不能直接包含 如果NumbersList是IList或类似的,那么您不能绑定到“Number”——只需使用{Binding} 您需

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

比如:

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

  • 内部不能直接包含
  • 如果NumbersList是IList或类似的,那么您不能绑定到“Number”——只需使用{Binding}

您需要为第二个
列表框设置
ItemTemplate
。它应该是这样的:

<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元素,否则不要给出UI元素的名称(name或x:name)。对于ItemTemplate中的项目尤其如此。

我觉得您的代码很好,您能提供用于“支持”此视图的模型吗?嗯,我不知道如何首先为这种结构设置模型(我可以填充外部列表框,但不知道如何填充内部列表框)。我想这才是我真正的问题:)说清楚点;联系人模型中的NumbersList是一个公共可观察的集合NumbersList。NumberInfo公开属性号。它应该像那样工作吗…?是的-你做的每件事都是对的!如果在调试窗口中查看,是否会出现任何绑定错误?是的,我会出现绑定错误:System.Windows.Data错误:BindingExpression路径错误:“在”TestApp.DataModels.Contact“TestApp.DataModels.Contact”(HashCode=65718800)上未找到“Number”属性。BindingExpression:Path='Number'DataItem='TestApp.DataModels.Contact'(HashCode=65718800);目标元素是'System.Windows.Controls.TextBlock'(Name='Number');目标属性为“Text”(类型为“System.String”)…NumberList为ObservableCollection NumberList,NumberInfo公开一个名为Number的属性。但正如我上面所评论的,我得到了绑定错误,这表明内部ListBox无法获取正确的数据模型/属性…非常感谢!!!这是一个愚蠢的错误,我敢打赌我本可以盯着代码看,不会看到这一点,只想知道绑定错误。现在可以了!请允许我问一下你的旁注;这是因为性能吗?这只是我在其他平台上的一个坏习惯。谢谢你的留言!这不会影响性能,只是养成了一个坏习惯。在ItemTemplate的上下文中,有许多项,因此有许多名为“Foo”的项。如果您不是通过某种方式(如绑定、触发器)访问该项,请将其删除。它更多的是为了xaml的可读性
   <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>
<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>