Apa perbedaan antara ListBox dan ListView

198

Apa perbedaan antara ListBox WPF dan ListView? Saya tidak dapat menemukan perbedaan yang signifikan di properti mereka. Apakah ada perbedaan penggunaan tipikal?

Rasto
sumber

Jawaban:

211

A ListViewpada dasarnya seperti ListBox(dan mewarisi darinya), tetapi juga memiliki Viewproperti. Properti ini memungkinkan Anda menentukan cara yang telah ditentukan untuk menampilkan item. Satu-satunya tampilan yang telah ditentukan di BCL ( Base Class Library ) adalah GridView, tetapi Anda dapat dengan mudah membuatnya sendiri .

Perbedaan lainnya adalah mode pemilihan default: itu Singleuntuk ListBox, tetapi Extendeduntuk aListView

Thomas Levesque
sumber
32

A ListViewmembiarkan Anda menentukan satu set viewsuntuk itu dan memberi Anda cara asli ( WPF bindingdukungan) untuk mengontrol tampilan ListViewdengan menggunakan yang ditentukan views.

Contoh:

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;
}

KELUARAN:

Tampilan Normal: Lihat 2 di atas XAML

Normal

MouseOver View: Lihat 1 di atas XAML

Arahkan Mouse

Jika Anda mencoba mencapai di atas dalam ListBox, mungkin Anda akan berakhir dengan menulis lebih banyak kode untuk ControlTempalate/ ItemTemplatedari ListBox.

Kylo Ren
sumber
Bagian Di Balik Kode bukan kode yang valid pada 2019-04-29 (kurung penutupan tambahan dan UpgradeProperty). Bisakah itu diperbaiki?
Frederic
2
Sudah benar. UpdateProperty adalah metode untuk memberi tahu properti yang diubah. Ini bisa sangat berbeda untuk Anda. Gunakan metode apa pun yang Anda gunakan untuk memberi tahu properti yang diubah. dan penjepit ekstra mana?
Kylo Ren
Terima kasih atas penjelasannya. Dan kamu benar. Saya kira saya terpesona oleh lokasi penjepit. Memang tidak ada kawat gigi tambahan. Saya akan membuat sedikit kode relooking jika Anda setuju.
Frederic
9

Listview berasal dari kontrol listbox. Satu perbedaan yang paling penting adalah listview menggunakan mode pemilihan diperluas secara default. listview juga menambahkan properti yang disebut tampilan yang memungkinkan Anda untuk menyesuaikan tampilan dengan cara yang lebih kaya daripada panel item kustom. Salah satu contoh kehidupan nyata dari listview dengan gridview adalah tampilan detail file explorer. Listview dengan tampilan kisi adalah kisi data yang kurang kuat. Setelah pengenalan daftar kontrol datagrid kehilangan pentingnya.

iaminvinicble
sumber