visual template seleccionar que item .net wpf wpf-controls

.net - template - Cuál es la diferencia entre ListBox y ListView



seleccionar un item de un listbox c# (3)

¿Cuál es la diferencia entre ListBox de WPF y ListView? No puedo encontrar ninguna diferencia significativa en sus propiedades. ¿Hay diferentes usos típicos?


Listview deriva del control de cuadro de lista. Una de las diferencias más importantes 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 de vida real de listview con gridview 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 poderosa. Después de la introducción del control de la cuadrícula de datos, la vista de lista perdió su importancia.


Un ListView permite definir un conjunto de views para él y le proporciona una forma nativa (soporte de binding WPF ) para controlar la visualización de ListView utilizando views definidas.

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 en arriba XAML

Vista de MouseOver: vista 1 en arriba XAML

Si intenta lograr lo anterior en un ListBox , probablemente termine escribiendo mucho más código para ControlTempalate / ItemTemplate of ListBox .


Un ListView es básicamente como un ListBox (y hereda de él), pero también tiene una propiedad View . Esta propiedad le permite especificar una forma predefinida de mostrar los artículos. La única vista predefinida en el BCL 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 un ListView