Pergunta

Eu tenho as seguintes classes, que contêm ObservableCollections do próximo nível abaixo:

Draw
ObservableCollection<Round>();

Round
ObservableCollection<Formation>();

Formation

Então um Empate é composto por Rodadas, as Rodadas são compostas por Formações.

Tenho uma página que possui um botão para criar sorteio aleatório, atualmente estou chamando outra classe que retorna sorteio:

this.defaultViewModel[DrawName] = RandomDraw.generate();

Não estou tendo problemas para vincular um ListView a Rounds e exibir informações de rodadas, mas como faço para exibir as formações individuais?Isso é o que estou fazendo atualmente, não esperava poder apenas exibir coisas vinculando-se a Formações, mas como faço para acessá-lo?

<ListView
    ItemsSource="{Binding Rounds}"
    IsItemClickEnabled="True"
    ItemClick="ItemView_ItemClick"
    ContinuumNavigationTransitionInfo.ExitElementContainer="True">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Margin="0,0,0,9.5">
                <TextBlock
                    Text="{Binding RoundNumber}"
                    TextWrapping="Wrap"
                    Pivot.SlideInAnimationGroup="1"
                    CommonNavigationTransitionInfo.IsStaggerElement="True"
                    Style="{ThemeResource ListViewItemTextBlockStyle}"
                    Margin="0,0,19,0"/>
                <TextBlock
                    Text="{Binding Formations}"
                    TextWrapping="WrapWholeWords"
                    Pivot.SlideInAnimationGroup="2" 
                    CommonNavigationTransitionInfo.IsStaggerElement="True" 
                    Style="{ThemeResource ListViewItemContentTextBlockStyle}"
                    Margin="0,0,19,0"/>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
Foi útil?

Solução

Você deve dar uma olhada nos modelos de dados hierárquicos, que são usados ​​pelo controle TreeView do WPF em vez de ListViews.Eles são uma escolha natural para mostrar dados hierárquicos.Claro, como qualquer controle WPF, você pode personalizar completamente sua aparência usando estilos e modelos.Aqui estão algumas boas referências:

MSDN Como fazer:Use um TreeView para exibir dados hierárquicos

Ligação de dados hierárquica no WPF

No entanto, se você quiser continuar usando ListViews, uma maneira de fazer isso é aninhar outro controle de contêiner dentro do ListVIew pai.ObservableCollections são processados ​​automaticamente por elementos específicos do WPF, como Panels.No seu exemplo, você pode substituir o segundo TextBlock por outro ListView, com um ItemTemplate semelhante ao primeiro.Também pode ser qualquer elemento Panel semelhante a uma coleção, como StackPanel.

<ListView
    ItemsSource="{Binding Rounds}"
    IsItemClickEnabled="True"
    ItemClick="ItemView_ItemClick"
    ContinuumNavigationTransitionInfo.ExitElementContainer="True">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Margin="0,0,0,9.5">
                <TextBlock
                    Text="{Binding RoundNumber}"
                    TextWrapping="Wrap"
                    Pivot.SlideInAnimationGroup="1"
                    CommonNavigationTransitionInfo.IsStaggerElement="True"
                    Style="{ThemeResource ListViewItemTextBlockStyle}"
                    Margin="0,0,19,0"/>
                <!-- CHANGED CODE HERE -->
                <ListView
                    ItemsSource="{Binding Formations}"
                    ...>
                    <ListView.ItemTemplate>...</ListView.ItemTemplate>
                </ListView>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top