将列表框项目源绑定到Windows Phone 7中的集合集合

时间:2010-12-21 17:49:55

标签: xaml data-binding windows-phone-7 listbox

我正在尝试将Listbox ItemSource绑定到多个列表的集合。即。

列出PersonCollection

  • 列出人

  • 列表集

现在我需要显示这两个列表中的项目。在wpf中你可以使用HierarchicalDataTemplate我相信,但不知道如何在Windows Phone 7中做到这一点。尝试使用Blend并生成以下数据模板。

<DataTemplate x:Key="PersonDataTemplate">
    <Grid>
        <StackPanel Margin="0,0,1,0" Orientation="Vertical" VerticalAlignment="Top">
            <TextBlock Margin="0,0,1,0" TextWrapping="Wrap" Text="{Binding Person[0].Name}" d:LayoutOverrides="Width"/>
            <TextBlock Margin="0,0,1,0" TextWrapping="Wrap" Text="{Binding Collection[0].Total}" d:LayoutOverrides="Width"/>
        </StackPanel>
    </Grid>
</DataTemplate> 

<ListBox Height="300" x:Name="personList" ItemsSource="{Binding PersonCollection}" Margin="10,0" ItemTemplate="{StaticResource PersonDataTemplate}"/>

我还有其他办法吗?我试图将DataTemplate中Textbox的DataContext设置为单个数组,但似乎不起作用。除了确认Windows Phone 7不支持HierarchicalDataTemplate之外,无法在网上找到任何类似内容。

我有其他办法,但没有优雅......

提前致谢。

此致

1 个答案:

答案 0 :(得分:1)

我认为你的场景可以用两级ListBox而不是Tree-Heirarchy来解决。看看下面的技巧是否有效。现在,您将在Grid中并排看到两个内部集合,这是另外两个ItemsControls(或者您可以使用ListBoxes)

    <DataTemplate x:Key="PersonCollextionItem">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="0.5*"/>
                <ColumnDefinition Width="0.5*"/>
            </Grid.ColumnDefinitions>
            <ItemsControl ItemsSource="{Binding ListPerson}" ItemTemplate="{StaticResource Templ1}"  Grid.Column="0"/>
            <ItemsControl ItemsSource="{Binding ListCollection}" ItemTemplate="{StaticResource Templ2}" Grid.Column="1"/>
        </Grid>
    </DataTemplate>

   <DataTemplate x:Key="Templ1">            
       <TextBlock Margin="0,0,1,0" Text="{Binding Name}" />                
    </DataTemplate>

    <DataTemplate x:Key="Templ2">
         <TextBlock Margin="0,0,1,0" Text="{Binding Total}" />
    </DataTemplate>


    <ListBox Height="300" x:Name="personList" ItemsSource="{Binding PersonCollection}" Margin="10,0" ItemTemplate="{StaticResource PersonCollextionItem}"/>