Visão geral de ListView
The ListView control provides the infrastructure to display a set of data items in different layouts or views. Por exemplo, um usuário pode querer para exibir itens de dados em uma tabela e também classificar suas colunas.
Este tópico contém as seguintes seções.
- O que É uma ListView?
- Definindo um modo de exibição para uma ListView
- Associando dados a uma ListView
- Estilizando uma ListView que implementa um GridView
- Compartilhando o mesmo modo de exibição
- Criando um modo de exibição personalizada
- Tópicos relacionados
O que É uma ListView?
O controle ListView é um ItemsControl que é derivado de ListBox. Normalmente, seus itens são membros de um conjunto de dados e são representados como objetos ListViewItem. Um ListViewItem é um ContentControl e pode conter apenas um único elemento filho. No entanto, tal elemento filho pode ser qualquer elemento visual.
Definindo um modo de exibição para uma ListView
Para especificar um modo de exibição para o conteúdo de um controle ListView , você define a propriedade View. Um modo de exibição que Windows Presentation Foundation (WPF) fornece é GridView, que exibe uma coleção de itens de dados em uma tabela que tenha colunas personalizáveis.
O exemplo a seguir mostra como definir um GridView para um controle ListView que exibe informações sobre funcionários. For the complete sample, see Exibição em Lista que usa um exemplo de GridView.
<ListView ItemsSource="{Binding Source=
{StaticResource EmployeeInfoDataSource}}">
<ListView.View>
<GridView AllowsColumnReorder="true"
ColumnHeaderToolTip="Employee Information">
<GridViewColumn DisplayMemberBinding=
"{Binding Path=FirstName}"
Header="First Name" Width="100"/>
<GridViewColumn DisplayMemberBinding=
"{Binding Path=LastName}"
Width="100">
<GridViewColumnHeader>Last Name
<GridViewColumnHeader.ContextMenu>
<ContextMenu MenuItem.Click="LastNameCM_Click"
Name="LastNameCM">
<MenuItem Header="Ascending" />
<MenuItem Header="Descending" />
</ContextMenu>
</GridViewColumnHeader.ContextMenu>
</GridViewColumnHeader>
</GridViewColumn>
<GridViewColumn DisplayMemberBinding=
"{Binding Path=EmployeeNumber}"
Header="Employee No." Width="100"/>
</GridView>
</ListView.View>
</ListView>
A ilustração a seguir mostra como os dados aparecem para o exemplo anterior.
Você pode criar um modo de exibição personalizado definindo uma classe que herda da classe ViewBase. A classe ViewBase fornece a infraestrutura que você precisa para criar um modo de exibição personalizado. Para obter mais informações sobre como criar uma exibição personalizada, consulte Como: Criar um Modo de Visualização Personalizado para um ListView.
Associando dados a uma ListView
Use as propriedades Items e ItemsSource para especificar itens para um controle ListView. O exemplo a seguir define a propriedade ItemsSource para uma coleção de dados que é chamada EmployeeInfoDataSource. For the complete sample, see Exibição em Lista que usa um exemplo de GridView.
<ListView ItemsSource="{Binding Source=
{StaticResource EmployeeInfoDataSource}}">
Em um GridView, objetos GridViewColumn associam a campos de dados específicos. O exemplo a seguir vincula um objeto GridViewColumn a um campo de dados, especificando um Binding para a propriedade DisplayMemberBinding. For the complete sample, see Exibição em Lista que usa um exemplo de GridView.
GridViewColumn gvc1 = new GridViewColumn();
gvc1.DisplayMemberBinding = new Binding("FirstName");
gvc1.Header = "FirstName";
gvc1.Width = 100;
<GridViewColumn DisplayMemberBinding=
"{Binding Path=FirstName}"
Header="First Name" Width="100"/>
Você também pode especificar um Binding como parte de uma definição DataTemplate que você usa para estilizar as células em uma coluna. No exemplo a seguir, o DataTemplate que é identificado com um ResourceKey define um Binding para um GridViewColumn. Observe que esse exemplo não define o DisplayMemberBinding porque fazendo isso substitui a vinculação especificada pelo DataTemplate. For the complete sample, see Exibição em Lista que usa um controle GridView com modelos de exemplo.
<DataTemplate x:Key="myCellTemplateMonth">
<DockPanel>
<TextBlock Foreground="DarkBlue" HorizontalAlignment="Center">
<TextBlock.Text>
<Binding Path="Month"/>
</TextBlock.Text>
</TextBlock>
</DockPanel>
</DataTemplate>
<GridViewColumn Header="Month" Width="80"
HeaderContainerStyle="{StaticResource myHeaderStyle}"
HeaderTemplate="{StaticResource myHeaderTemplate}"
DisplayMemberBinding="{Binding Path=Month}"/>
Estilizando uma ListView que implementa um GridView
O controle ListView contém objetos ListViewItem, que representam os itens de dados que são exibidos. Você pode usar as propriedades a seguir para definir o conteúdo e estilo dos itens de dados:
No controle ListView, use as propriedades ItemTemplate, ItemTemplateSelector e ItemContainerStyle.
No controle ListViewItem, use as propriedades ContentTemplate, e ContentTemplateSelector.
Para evitar problemas de alinhamento entre as células em uma GridView, não use o ItemContainerStyle para definir propriedades ou adicionar conteúdo que afeta a largura de um item em um ListView. Por exemplo, um problema de alinhamento pode ocorrer quando você define a propriedade Margin em ItemContainerStyle. Para especificar propriedades ou definir o conteúdo que afeta a largura de itens em um GridView, use as propriedades da classe GridView e suas classes relacionados, como GridViewColumn.
Para obter mais informações sobre como usar GridView e suas classes de suporte, consulte GridView Overview.
Se você definir um ItemContainerStyle para um controle ListView e também definir um ItemTemplate, você deve incluir um ContentPresenter no estilo na ordem para o ItemTemplate funcionar corretamente.
Não use as propriedades HorizontalContentAlignment e VerticalContentAlignment para conteúdo ListView que é exibido usando um GridView. Para especificar o alinhamento do conteúdo em uma coluna de uma GridView, defina um CellTemplate.
Compartilhando o mesmo modo de exibição
Dois controles ListView não podem compartilhar o mesmo modo de exibição ao mesmo tempo. Se você tentar usar o mesmo modo de exibição com mais de um controle ListView, ocorre uma exceção.
Para especificar um modo de exibição que pode ser usado simultaneamente por mais de um ListView, use os modelos ou estilos. Para obter um exemplo de como definir modos de exibição tais como Resources, consulte Exibição em Lista com Múltiplo exibições exemplo.
Criando um modo de exibição personalizada
Exibições personalizadas como GridView são derivadas da classe abstrata ViewBase, que fornece as ferramentas para exibir itens de dados que são representados como objetos ListViewItem.
Para um exemplo de um modo de exibição personalizado, consulte Exibição em Lista com Múltiplo exibições exemplo.
Consulte também
Conceitos
Otimizando o desempenho: Controles