Jaka jest różnica między ListBox WPF a ListView? Nie mogę znaleźć żadnej znaczącej różnicy w ich właściwościach. Czy jest inne typowe zastosowanie?
źródło
Jaka jest różnica między ListBox WPF a ListView? Nie mogę znaleźć żadnej znaczącej różnicy w ich właściwościach. Czy jest inne typowe zastosowanie?
A ListView
jest w zasadzie jak ListBox
(i dziedziczy po nim), ale ma także View
właściwość. Ta właściwość umożliwia określenie predefiniowanego sposobu wyświetlania elementów. Jedynym predefiniowanym widokiem w BCL ( Biblioteka klas podstawowych ) jest GridView
, ale możesz łatwo stworzyć swój własny .
Kolejną różnicą jest domyślny tryb wyboru: jest Single
dla ListBox
, ale Extended
dlaListView
ListView
Pozwalają zdefiniować zestaw views
dla niego i daje natywną sposób ( WPF
binding
Support) do sterowania wyświetlaniem ListView
przez korzystając z definicją views
.
Przykład:
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;
}
WYNIK:
Widok normalny: widok 2 powyżej XAML
Widok myszy: widok 1 powyżej XAML
Jeśli spróbujesz osiągnąć powyższe w
ListBox
, prawdopodobnie skończysz pisać o wiele więcej kodu dlaControlTempalate
/ItemTemplate
zListBox
.
Widok listy pochodzi ze sterowania listbox. Jedną z najważniejszych różnic jest to, że widok listy domyślnie korzysta z trybu rozszerzonego wyboru. listview dodaje również właściwość o nazwie view, która pozwala dostosować widok w bogatszy sposób niż niestandardowy element iteman. Jednym z prawdziwych przykładów widoku listy z widokiem siatki jest widok szczegółów eksploratora plików. Widok listy z widokiem siatki jest mniej wydajną siatką danych. Po wprowadzeniu kontroli kontrolnej datagrid widok listy stracił na znaczeniu.
źródło