2011-01-16 75 views
144

Sự khác nhau 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ó cách sử dụng điển hình khác không?Sự khác nhau giữa ListBox và ListView

Trả lời

160

A ListView về cơ bản giống như ListBox (và thừa kế từ nó), nhưng nó cũng có thuộc tính View. Thuộc tính này cho phép bạn chỉ định cách hiển thị trước các mục. Chế độ xem được xác định trước duy nhất trong BCL là GridView, nhưng bạn có thể dễ dàng create your own.

khác biệt nữa là chế độ lựa chọn mặc định: đó là Single cho một ListBox, nhưng Extended cho một ListView

+14

Bạn có ý gì với BCL? Cảm ơn. –

+34

@DanieleArmanasco, BCL = [Thư viện lớp cơ sở] (http://en.wikipedia.org/wiki/Base_Class_Library) –

9

Một ListView phép bạn xác định một tập hợp các views cho nó và cung cấp cho bạn một cách tự nhiên (WPFbinding hỗ trợ) để kiểm soát hiển thị ListView bằng cách sử dụng được xác định views.

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

OUTPUT:

Normal View: View 2 ở trên XAML

Normal

MouseOver Xem: Xem 1 trong trên XAML

Mouse Over

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

3

Danh sách phát sinh từ điều khiển hộp danh sách. Một 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à khung nhìn cho phép bạn tùy chỉnh chế độ xem theo cách phong phú hơn một itemspanel tùy chỉnh. Một ví dụ thực tế về đời sống của listview với GridView là xem chi tiết của tập tin thám hiểm. Chế độ xem danh sách với chế độ xem lưới là lưới dữ liệu ít mạnh mẽ hơn. Sau khi giới thiệu danh sách kiểm soát datagrid kiểm soát bị mất tầm quan trọng của nó.

Các vấn đề liên quan