ListBox ของ WPF กับ ListView แตกต่างกันอย่างไร ฉันไม่พบความแตกต่างอย่างมีนัยสำคัญในคุณสมบัติของพวกเขา มีการใช้งานทั่วไปแตกต่างกันอย่างไร
ListBox ของ WPF กับ ListView แตกต่างกันอย่างไร ฉันไม่พบความแตกต่างอย่างมีนัยสำคัญในคุณสมบัติของพวกเขา มีการใช้งานทั่วไปแตกต่างกันอย่างไร
คำตอบ:
A ListView
นั้นเป็นเหมือนListBox
(และสืบทอดมาจากมัน) แต่ก็มีView
คุณสมบัติเช่นกัน คุณสมบัตินี้ช่วยให้คุณระบุวิธีการแสดงรายการที่กำหนดไว้ล่วงหน้า มุมมองที่กำหนดไว้ล่วงหน้าเฉพาะใน BCL ( ห้องสมุดชั้นฐาน ) เป็นGridView
แต่คุณสามารถสร้างของคุณเอง
ข้อแตกต่างอีกประการคือโหมดการเลือกเริ่มต้น: Single
สำหรับ a ListBox
และExtended
สำหรับ aListView
ListView
ช่วยให้คุณสามารถกำหนดชุดของviews
มันและช่วยให้คุณวิธีพื้นเมือง ( WPF
binding
สนับสนุน) เพื่อควบคุมการแสดงผลของโดยใช้กำหนด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
มุมมอง MouseOver: ดู 1 รายการด้านบน XAML
ถ้าคุณพยายามที่จะบรรลุดังกล่าวข้างต้นใน
ListBox
อาจจะคุณจะจบลงเขียนโค้ดมากขึ้นสำหรับControlTempalate
/ ของItemTemplate
ListBox
Listview มาจากการควบคุมกล่องรายการ ความแตกต่างที่สำคัญอย่างหนึ่งคือ listview ใช้โหมดการเลือกแบบขยายตามค่าเริ่มต้น listview ยังเพิ่มคุณสมบัติที่เรียกว่ามุมมองซึ่งช่วยให้คุณสามารถปรับแต่งมุมมองในแบบที่สมบูรณ์ยิ่งขึ้นกว่า itemspanel ที่กำหนดเอง ตัวอย่างหนึ่งในชีวิตจริงของ listview พร้อม gridview คือมุมมองรายละเอียดของ file explorer Listview พร้อมมุมมองกริดเป็นกริดข้อมูลที่มีประสิทธิภาพน้อย หลังจากการแนะนำของ listagrid ควบคุม listview สูญเสียความสำคัญ