¿Cuál es la diferencia entre ListBox y ListView de WPF? No puedo encontrar ninguna diferencia significativa en sus propiedades. ¿Hay un uso típico diferente?
fuente
¿Cuál es la diferencia entre ListBox y ListView de WPF? No puedo encontrar ninguna diferencia significativa en sus propiedades. ¿Hay un uso típico diferente?
A ListView
es básicamente como un ListBox
(y hereda de él), pero también tiene una View
propiedad. Esta propiedad le permite especificar una forma predefinida de mostrar los elementos. La única vista predefinida en BCL ( Base Class Library ) es GridView
, pero puede crear fácilmente la suya propia .
Otra diferencia es el modo de selección predeterminado: es Single
para un ListBox
, pero Extended
para unListView
A le ListView
permite definir un conjunto de views
para ello y le brinda una forma nativa ( WPF
binding
soporte) para controlar la visualización ListView
mediante el uso de definido views
.
Ejemplo:
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;
}
SALIDA:
Vista normal: vista 2 arriba XAML
MouseOver View: Ver 1 en arriba XAML
Si intentas lograr lo anterior en un
ListBox
, probablemente terminarás escribiendo mucho más código paraControlTempalate
/ItemTemplate
deListBox
.
La vista de lista deriva del control de cuadro de lista. Una diferencia más importante es que listview usa el modo de selección extendida de forma predeterminada. listview también agrega una propiedad llamada vista que le permite personalizar la vista de una manera más rica que un panel de elementos personalizado. Un ejemplo real de vista de lista con vista de cuadrícula es la vista de detalles del explorador de archivos. La vista de lista con vista de cuadrícula es una cuadrícula de datos menos potente. Después de la introducción de la vista de lista de control de cuadrícula de datos perdió su importancia.
fuente