Привязка источника элемента списка к коллекции коллекций в Windows Phone 7 - PullRequest
1 голос
/ 21 декабря 2010

Я пытаюсь привязать 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}"/>

Есть ли другой способ сделать это? Я попытался установить DataContext из Textbox в DataTemplate для отдельных массивов, но, похоже, не работает. Не могу найти ничего похожего в сети, кроме подтверждения того, что HierarchicalDataTemplate не поддерживается в Windows Phone 7.

У меня есть другие способы сделать, но ни один элегантный ..

Заранее спасибо.

Привет

1 Ответ

1 голос
/ 21 декабря 2010

Я думаю, что ваш сценарий может быть решен с помощью двухуровневых списков вместо Tree-Heirarchy.Посмотрите, работает ли приведенный ниже трюк.Теперь вы увидите обе ваши внутренние коллекции в Grid, которые являются двумя другими ItemControls (или вы можете иметь 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}"/>
...