Qual é a diferença entre o ListBox do WPF e o ListView? Não consigo encontrar nenhuma diferença significativa em suas propriedades. Existe um uso típico diferente?
fonte
Qual é a diferença entre o ListBox do WPF e o ListView? Não consigo encontrar nenhuma diferença significativa em suas propriedades. Existe um uso típico diferente?
A ListView
é basicamente como um ListBox
(e herda dele), mas também tem uma View
propriedade. Esta propriedade permite especificar uma maneira predefinida de exibir os itens. A única visualização predefinida na BCL ( Base Class Library ) é GridView
, mas você pode criar facilmente a sua própria .
Outra diferença é o modo de seleção padrão: é Single
para um ListBox
, mas Extended
para umListView
Uma ListView
permitem definir um conjunto de views
para-lo e dá-lhe uma forma nativa ( WPF
binding
suporte) para controlar a exibição de ListView
por usando definido views
.
Exemplo:
XAML
<ListView ItemsSource="{Binding list}" Name="listv" MouseEnter="listv_MouseEnter" MouseLeave="listv_MouseLeave">
<ListView.Resources>
<GridView x:Key="one">
<GridViewColumn Header="ID" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding id}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Name" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding name}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
<GridView x:Key="two">
<GridViewColumn Header="Name" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding name}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.Resources>
<ListView.Style>
<Style TargetType="ListView">
<Style.Triggers>
<DataTrigger Binding="{Binding ViewType}" Value="1">
<Setter Property="View" Value="{StaticResource one}" />
</DataTrigger>
</Style.Triggers>
<Setter Property="View" Value="{StaticResource two}" />
</Style>
</ListView.Style>
Code Behind:
private int viewType;
public int ViewType
{
get { return viewType; }
set
{
viewType = value;
UpdateProperty("ViewType");
}
}
private void listv_MouseEnter(object sender, MouseEventArgs e)
{
ViewType = 1;
}
private void listv_MouseLeave(object sender, MouseEventArgs e)
{
ViewType = 2;
}
RESULTADO:
Vista normal: Vista 2 acima XAML
Vista MouseOver: Vista 1 acima XAML
Se você tentar alcançar acima em a
ListBox
, provavelmente acabará escrevendo muito mais código paraControlTempalate
/ItemTemplate
deListBox
.
O Listview deriva do controle da caixa de listagem. Uma diferença mais importante é que o listview usa o modo de seleção estendida por padrão. O listview também adiciona uma propriedade chamada view, que permite personalizar a visualização de uma maneira mais rica do que um painel de itens personalizado. Um exemplo real de listview com gridview é a visualização de detalhes do explorador de arquivos. Listview com exibição em grade é uma grade de dados menos poderosa. Após a introdução do controle datagrid, o listview perdeu sua importância.
fonte