Qual è la differenza tra ListBox e ListView


198

Qual è la differenza tra ListBox di WPF e ListView? Non riesco a trovare alcuna differenza significativa nelle loro proprietà. C'è un uso tipico diverso?

Risposte:


211

A ListViewè fondamentalmente come un ListBox(ed eredita da esso), ma ha anche una Viewproprietà. Questa proprietà consente di specificare un modo predefinito di visualizzare gli articoli. L'unica vista predefinita nel BCL ( Base Class Library ) è GridView, ma puoi facilmente crearne una tua .

Un'altra differenza è la modalità di selezione predefinita: è Singleper a ListBox, ma Extendedper aListView


32

Un ListViewconsentono di definire un insieme di viewsper esso e ti dà un modo nativo ( WPF bindingsupporto) per controllare la visualizzazione di ListViewutilizzare sia definito views.

Esempio:

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;
}

PRODUZIONE:

Vista normale: vista 2 in alto XAML

Normale

MouseOver View: Visualizza 1 in alto XAML

Passa il mouse sopra

Se provi a ottenere sopra in a ListBox, probabilmente finirai per scrivere molto più codice per ControlTempalate/ ItemTemplateof ListBox.


La sezione Codice dietro non è un codice valido dal 29-04-2019 (parentesi extra di chiusura e proprietà di aggiornamento). Può essere corretto?
Frederic,

2
È già corretto. UpdateProperty è un metodo per notificare la proprietà modificata. Può essere totalmente diverso per te. Utilizzare il metodo utilizzato per notificare la proprietà modificata. e quale coppia extra?
Kylo Ren,

Bene, grazie per la spiegazione. E hai ragione. Immagino di essere rimasto affascinato dalle posizioni del tutore. Non ci sono davvero parentesi graffe extra. Farò un piccolo codice ricaricando però se siete d'accordo.
Frederic,

9

Listview deriva dal controllo listbox. Una differenza più importante è la visualizzazione elenco utilizza la modalità di selezione estesa per impostazione predefinita. listview aggiunge anche una proprietà chiamata view che consente di personalizzare la visualizzazione in modo più ricco rispetto a un pannello di elementi personalizzato. Un esempio di vita reale di listview con gridview è la vista dei dettagli di Esplora file. Listview con visualizzazione griglia è una griglia dati meno potente. Dopo l'introduzione del controllo datagrid listview ha perso la sua importanza.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.