开发者

Binding Listbox item source to a collection of collections in windows phone 7

开发者 https://www.devze.com 2023-01-31 11:14 出处:网络
I am trying to bind a Listbox ItemSource to a collection of multiple Lists. i.e. List PersonCollection

I am trying to bind a Listbox ItemSource to a collection of multiple Lists. i.e.

List PersonCollection

  • List Person

  • List Collection

Now I need to show items from both of these list. In wpf you could use HierarchicalDataTemplate i believe, but not sure how I can do it in windows phone 7. Tried with Blend and it generates the following data template.

<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" ItemTemp开发者_StackOverflowlate="{StaticResource PersonDataTemplate}"/>

Is there another way I can do this? I have tried to set the DataContext of Textbox in DataTemplate to individual arrays but did not seem to work. Cant find anything similar on the net apart from the confirmation that HierarchicalDataTemplate is not supported in Windows Phone 7.

I have other ways to do but none elegant..

Thanks in advance.

Regards


I think your scenario can be solved with two level ListBoxes instead of Tree-Heirarchy. See if the below trick works. Now you will see Both of your inner collection side by side in a Grid which are two other ItemsControls(Or you can have 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}"/>
0

精彩评论

暂无评论...
验证码 换一张
取 消