Sự khác biệt giữa ListBox và ListView là gì


198

Sự khác biệt giữa ListBox và ListView của WPF là gì? Tôi không thể tìm thấy bất kỳ sự khác biệt đáng kể trong tài sản của họ. Có sử dụng điển hình khác nhau?

Câu trả lời:


211

A ListViewvề cơ bản giống như một ListBox(và thừa hưởng từ nó), nhưng nó cũng có một Viewtài sản. Thuộc tính này cho phép bạn chỉ định một cách hiển thị được xác định trước các mục. Khung nhìn duy nhất được xác định trước trong BCL ( Thư viện lớp cơ sở ) là GridView, nhưng bạn có thể dễ dàng tạo khung nhìn của riêng mình .

Một sự khác biệt khác là chế độ lựa chọn mặc định: đó là Singlecho một ListBox, nhưng Extendedcho mộtListView


32

A ListViewcho phép bạn xác định một bộ viewscho nó và cung cấp cho bạn một cách riêng ( WPF bindinghỗ trợ) để điều khiển hiển thị ListViewbằng cách sử dụng được xác định views.

Thí dụ:

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

ĐẦU RA:

Chế độ xem bình thường: Xem 2 ở trên XAML

Bình thường

Chế độ xem MouseOver: Xem 1 ở trên XAML

Di chuột lên trên

Nếu bạn cố gắng đạt được ở trên trong một ListBox, có thể bạn sẽ viết được nhiều mã hơn cho ControlTempalate/ ItemTemplatecủa ListBox.


Phần Code đằng sau không phải là mã hợp lệ kể từ 2019-04-29 (cú đúp đóng thêm và Nâng cấp chương trình). Nó có thể được sửa chữa?
Frederic

2
Nó đã đúng. UpdateProperty là một phương thức để thông báo thay đổi thuộc tính. Nó có thể hoàn toàn khác nhau cho bạn. Sử dụng bất cứ nơi nào bạn đang sử dụng để thông báo thay đổi tài sản. và thêm niềng răng?
Kylo Ren

Vâng cảm ơn bạn đã giải thích. Và bạn nói đúng không. Tôi đoán rằng tôi đã bị mê hoặc bởi các vị trí niềng răng. Thực sự không có thêm niềng răng. Tôi sẽ làm một ít mã lại mặc dù nếu bạn đồng ý.
Frederic

9

Listview xuất phát từ kiểm soát hộp danh sách. Một sự khác biệt quan trọng nhất là listview sử dụng chế độ lựa chọn mở rộng theo mặc định. listview cũng thêm một thuộc tính được gọi là chế độ xem cho phép bạn tùy chỉnh chế độ xem theo cách phong phú hơn so với bảng mục tùy chỉnh. Một ví dụ thực tế của listview với Gridview là chế độ xem chi tiết của trình khám phá tệp. Listview với chế độ xem lưới là một lưới dữ liệu ít mạnh mẽ hơn. Sau khi giới thiệu listview kiểm soát datagrid mất tầm quan trọng của nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.