none
ListBox com subitens RRS feed

  • Pergunta

  • Olá a todos, gostaria de saber como eu poderia resolver a questão: Como inserir subitens aos itens de um listbox ?

    A situação é a seguinte, um vendedor visita um cliente para apresentar novos produtos. Ele executa uma consulta de um histórico que exibe as datas das visitas anteriores e quais foram os produtos apresentados ao cliente.

    Na prática eu tenho um XML que armazena as visitas anteriores e os produtos que foram apresentados. Eu quero exibir estas informações em um ListBox no seguinte formato:


    15/03/2009 (iten do listbox)
        Produto 01  (subitens do listbox)
        Produto 04
        Produto 07

    16/03/2009 (iten do listbox)
        Produto 08 (subitens do listbox)
        Produto 03

    19/03/2009 (iten do listbox)
        Produto 05 (subitens do listbox)
        Produto 09


    Será que fui claro a respeito da situação até aqui ? Enfim, o que eu pensei para resolver (sei que não foi a melhor maneira e talves seja até meio POG) foi adicionar outro listbox ao DataTemplate do ListBox, algo como:

    1 <DataTemplate x:Key="VisitaTemplate" DataType="{x:Type e:Visita}">  
    2     <WrapPanel Background="Transparent" Width="190" Margin="0,0,0,10">  
    3         <TextBlock Text="{Binding Path=DataVisita}" Width="75" HorizontalAlignment="Center" /> 
    4         <ListBox ItemsSource="{Binding Path=Produtos}" ItemTemplate="{StaticResource ProdutoTemplate}" /> 
    5     </WrapPanel> 
    6 </DataTemplate> 


    Ou seja, cada entidade que popula o ListBox contém algumas informações, entre elas DataVisita e uma coleção da entidade Produto que serão os subitens do meu ListBox.

    O resultado dessa brincadeira é que não deu certo hehehe. Ah, o DataTemplate ProdutoTemplate só contém um TextBlock que preenche o Text com um Binding na propriedade NomeProduto.

    Gostaria da opinião da comunidade sobre como resolveriam este problema, enquanto isso eu continuo pensando em uma maneira menos pior de resolver isto.

    []'s


    Roni Peterson
    sexta-feira, 20 de março de 2009 14:51

Respostas

  • Se usar WindowsFormHost for uma opção, dê uma olhada nessa componente  http://objectlistview.sourceforge.net/.

    É bem completa, e simples de usar.

    No proprio site tem um exemplo de agrupamento como voce quer: http://objectlistview.sourceforge.net/cs/gettingStarted.html#grouping
    quinta-feira, 2 de abril de 2009 03:11
  • Rodrigo, eu consegui utilizando o xaml, era como eu queria mesmo.

    <ListBox.ItemTemplate>
        <DataTemplate DataType="{x:Type Data:Historico}">
            <WrapPanel>
    	<TextBlock Text="{Binding Data}" FontWeight="Bold" FontFamily="Verdana" FontSize="12" Margin="10,5,0,0" />
    						<TextBlock Text="{Binding Tempo}" FontFamily="Verdana" FontSize="10" Margin="10,5,0,0"/>
    						<StackPanel>
    	    <ItemsControl ItemsSource="{Binding Path=MateriaisHistorico}">
    	        <ItemsControl.ItemTemplate>
    							<DataTemplate DataType="{x:Type Data:MaterialHistorico}">
    							<TextBlock Text="{Binding Titulo}" FontWeight="Bold" Width="180" FontFamily="Verdana" FontSize="10" Margin="25,5,0,0"  />
    		</DataTemplate>
                            </ItemsControl.ItemTemplate>
    						    </ItemsControl>				</StackPanel>
               </WrapPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
    []'s
    Roni Peterson
    terça-feira, 7 de abril de 2009 19:35

Todas as Respostas

  • Se usar WindowsFormHost for uma opção, dê uma olhada nessa componente  http://objectlistview.sourceforge.net/.

    É bem completa, e simples de usar.

    No proprio site tem um exemplo de agrupamento como voce quer: http://objectlistview.sourceforge.net/cs/gettingStarted.html#grouping
    quinta-feira, 2 de abril de 2009 03:11
  • Rodrigo, eu consegui utilizando o xaml, era como eu queria mesmo.

    <ListBox.ItemTemplate>
        <DataTemplate DataType="{x:Type Data:Historico}">
            <WrapPanel>
    	<TextBlock Text="{Binding Data}" FontWeight="Bold" FontFamily="Verdana" FontSize="12" Margin="10,5,0,0" />
    						<TextBlock Text="{Binding Tempo}" FontFamily="Verdana" FontSize="10" Margin="10,5,0,0"/>
    						<StackPanel>
    	    <ItemsControl ItemsSource="{Binding Path=MateriaisHistorico}">
    	        <ItemsControl.ItemTemplate>
    							<DataTemplate DataType="{x:Type Data:MaterialHistorico}">
    							<TextBlock Text="{Binding Titulo}" FontWeight="Bold" Width="180" FontFamily="Verdana" FontSize="10" Margin="25,5,0,0"  />
    		</DataTemplate>
                            </ItemsControl.ItemTemplate>
    						    </ItemsControl>				</StackPanel>
               </WrapPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
    []'s
    Roni Peterson
    terça-feira, 7 de abril de 2009 19:35