Qual è la differenza tra ListBox di WPF e ListView? Non riesco a trovare alcuna differenza significativa nelle loro proprietà. C'è un uso tipico diverso?Qual è la differenza tra ListBox e ListView
risposta
A ListView
è fondamentalmente come un ListBox
(e ne eredita), ma ha anche una proprietà View
. Questa proprietà consente di specificare un modo predefinito di visualizzazione degli articoli. L'unica visualizzazione predefinita nel BCL è GridView
, ma è possibile facilmente create your own.
Un'altra differenza è la modalità di selezione predefinita: è Single
per un ListBox
, ma Extended
per un ListView
Un ListView
consentono di definire un insieme di views
per esso e ti dà un modo nativo (WPF
binding
supporto) per controllare il display di ListView
utilizzando il numero 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;
}
USCITA:
Normale Vista: 2 sopra XAML
MouseOver Vista: 1 sopra XAML
Se si tenta di ottenere sopra in un
ListBox
, probabilmente si finisce nel scrivere molto di più codice perControlTempalate
/ItemTemplate
diListBox
.
La visualizzazione lista deriva dal controllo casella di riepilogo. Una delle differenze più importanti è listview che 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 degli articoli personalizzato. Un esempio di vita reale di listview con gridview è la vista dettagli di Esplora file. La visualizzazione elenco con la vista griglia è una griglia di dati meno potente. Dopo l'introduzione del controllo di datagrid, listview ha perso la sua importanza.
Cosa intendi per BCL? Grazie. –
@DanieleArmanasco, BCL = [Base Class Library] (http://en.wikipedia.org/wiki/Base_Class_Library) –