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?
la source
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?
A ListView
est fondamentalement comme un ListBox
(et en hérite), mais il a aussi une View
proprié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 Single
pour un ListBox
, mais Extended
pour unListView
Un ListView
vous permet de définir un ensemble de views
pour cela et vous donne un moyen natif ( WPF
binding
support) de contrôler l'affichage ListView
en 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
Vue MouseOver: Voir 1 ci-dessus XAML
Si vous essayez d'atteindre ci-dessus dans un
ListBox
, vous finirez probablement par écrire beaucoup plus de code pourControlTempalate
/ItemTemplate
ofListBox
.
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.
la source