¿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 ListViewes básicamente como un ListBox(y hereda de él), pero también tiene una Viewpropiedad. 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 Singlepara un ListBox, pero Extendedpara unListView
A le ListViewpermite definir un conjunto de viewspara ello y le brinda una forma nativa ( WPF bindingsoporte) para controlar la visualización ListViewmediante 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/ItemTemplatedeListBox.
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