В чем разница между ListBox и ListView

В чем разница между WPF 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

Normal

MouseOver View: вид 1 выше XAML

Mouse Over

Если вы попытаетесь достичь вышеупомянутого в ListBox, вероятно, вы в конечном итоге будете писать намного больше кода для ControlTempalate/ItemTemplate ListBox.

Ответ 3

Listview происходит из управления списком. Самое важное отличие - listview использует режим расширенного выбора по умолчанию. listview также добавляет свойство, называемое view, которое позволяет вам настраивать представление более богатым способом, чем пользовательская панель items. Один пример реальной жизни listview с gridview - это просмотр сведений о файле. Listview с видом сетки - это менее мощная сетка данных. После введения контрольного списка данных datagrid утратила свою значимость.