В чем разница между WPF ListBox и ListView? Я не могу найти существенной разницы в их свойствах. Существует ли различное типичное использование?
В чем разница между ListBox и ListView
Ответ 1
ListView
в основном похож на ListBox
(и наследует от него), но у него также есть свойство View
. Это свойство позволяет указать предопределенный способ отображения элементов. Единственным предопределенным представлением в BCL (Base Class Library) является GridView
, но вы можете легко создать свой собственный.
Другим отличием является режим выбора по умолчанию: Single
для ListBox
, но Extended
для ListView
Ответ 2
ListView
позволяет вам определить набор views
для него и предоставляет собственный способ (поддержка binding
WPF
) для управления отображением ListView
с помощью определенных views
.
Пример:
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;
}
ВЫХОД:
Нормальный вид: вид 2 выше XAML
MouseOver View: вид 1 выше XAML
Если вы попытаетесь достичь вышеупомянутого в
ListBox
, вероятно, вы в конечном итоге будете писать намного больше кода дляControlTempalate
/ItemTemplate
ListBox
.
Ответ 3
Listview происходит из управления списком. Самое важное отличие - listview использует режим расширенного выбора по умолчанию. listview также добавляет свойство, называемое view, которое позволяет вам настраивать представление более богатым способом, чем пользовательская панель items. Один пример реальной жизни listview с gridview - это просмотр сведений о файле. Listview с видом сетки - это менее мощная сетка данных. После введения контрольного списка данных datagrid утратила свою значимость.