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