¿Cuál es la diferencia entre ListBox y ListView?

198

¿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?

Rasto
fuente

Respuestas:

211

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

Thomas Levesque
fuente
32

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

Normal

MouseOver View: Ver 1 en arriba XAML

Ratón sobre

Si intentas lograr lo anterior en un ListBox, probablemente terminarás escribiendo mucho más código para ControlTempalate/ ItemTemplatede ListBox.

Kylo Ren
fuente
La sección Código detrás no es un código válido a partir del 2019-04-29 (llave de cierre adicional y UpgradeProperty). ¿Se puede corregir?
Frederic
2
Ya es correcto UpdateProperty es un método para notificar la propiedad modificada. Puede ser totalmente diferente para ti. Use el método que esté utilizando para notificar los cambios de propiedad. y que tirante extra?
Kylo Ren
Bueno, gracias por la explicación. Y usted tiene razón. Supongo que estaba hipnotizado por las ubicaciones de los aparatos ortopédicos. De hecho, no hay llaves adicionales. Sin embargo, haré un pequeño código de revisión si está de acuerdo.
Frederic
9

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.

iaminvinicble
fuente