Quelle est la différence entre ListBox et ListView

198

Quelle est la différence entre ListBox et ListView de WPF? Je ne trouve aucune différence significative dans leurs propriétés. Y a-t-il une utilisation typique différente?

Rasto
la source

Réponses:

211

A ListViewest fondamentalement comme un ListBox(et en hérite), mais il a aussi une Viewpropriété. Cette propriété vous permet de spécifier une manière prédéfinie d'afficher les éléments. La seule vue prédéfinie de la BCL ( Base Class Library ) est GridView, mais vous pouvez facilement créer la vôtre .

Une autre différence est le mode de sélection par défaut: c'est Singlepour un ListBox, mais Extendedpour unListView

Thomas Levesque
la source
32

Un ListViewvous permet de définir un ensemble de viewspour cela et vous donne un moyen natif ( WPF bindingsupport) de contrôler l'affichage ListViewen utilisant défini views.

Exemple:

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

PRODUCTION:

Vue normale: vue 2 ci-dessus XAML

Ordinaire

Vue MouseOver: Voir 1 ci-dessus XAML

Passer la souris

Si vous essayez d'atteindre ci-dessus dans un ListBox, vous finirez probablement par écrire beaucoup plus de code pour ControlTempalate/ ItemTemplateof ListBox.

Kylo Ren
la source
La section Code derrière n'est pas un code valide au 2019-04-29 (accolade de fermeture supplémentaire et UpgradeProperty). Peut-il être corrigé?
Frédéric
2
C'est déjà correct. UpdateProperty est une méthode pour notifier la modification de la propriété. Cela peut être totalement différent pour vous. Utilisez la méthode que vous utilisez pour notifier la modification de la propriété. et quelle attelle supplémentaire?
Kylo Ren
Merci pour l'explication. Et tu as raison. Je suppose que j'ai été fasciné par les emplacements des accolades. Il n'y a en effet aucun appareil supplémentaire. Je ferai un peu de relooking de code si vous êtes d'accord.
Frédéric
9

Listview dérive du contrôle de listbox. Une différence la plus importante est que listview utilise le mode de sélection étendu par défaut. listview ajoute également une propriété appelée vue qui vous permet de personnaliser la vue d'une manière plus riche qu'un panneau d'éléments personnalisé. Un exemple réel de listview avec gridview est la vue détaillée de l'explorateur de fichiers. Listview with grid view est une grille de données moins puissante. Après l'introduction du contrôle de liste de données, listview a perdu de son importance.

iaminvinicble
la source