В чем разница между ListBox WPF и ListView? Я не могу найти какой-либо существенной разницы в их свойствах. Есть ли другое типичное использование?
источник
В чем разница между ListBox WPF и ListView? Я не могу найти какой-либо существенной разницы в их свойствах. Есть ли другое типичное использование?
A ListView
в основном похож на ListBox
(и наследует от него), но у него также есть View
свойство. Это свойство позволяет указать предопределенный способ отображения элементов. Единственное предопределенное представление в BCL ( библиотека базовых классов ) 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
Если вы попытаетесь достичь выше в a
ListBox
, вероятно, вы в конечном итоге будете писать гораздо больше кода дляControlTempalate
/ItemTemplate
ofListBox
.
Listview происходит из списка управления. Одним из наиболее важных отличий является то, что просмотр списка использует расширенный режим выбора по умолчанию. В listview также добавлено свойство под названием view, которое позволяет настраивать представление более богатым способом, чем настраиваемая панель элементов. Одним из реальных примеров просмотра списка с gridview является просмотр сведений о проводнике. Listview с сеткой - менее мощная сетка данных. После введения datagrid контрольный просмотр списка потерял свое значение.
источник