关于.net:ListBox和ListView有什么区别

What is The difference between ListBox and ListView

WPF的ListBox和ListView有什么区别? 我找不到它们的属性有任何显着差异。 有不同的典型用法吗?


ListView基本上类似于ListBox(并从其继承),但它也具有View属性。此属性使您可以指定显示项目的预定义方式。 BCL(基类库)中唯一的预定义视图是GridView,但您可以轻松创建自己的视图。

另一个区别是默认选择模式:ListBoxSingleListViewExtended


ListView允许您为其定义一组views,并为您提供本机方式(WPF binding支持),以通过使用定义的views来控制ListView的显示。

例:

XAML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
}

输出:

普通视图:XAML中的视图2

Normal

MouseOver视图:XAML中的第1个视图

Mouse Over

If you try to achieve above in a ListBox, probably you'll end up writing a lot more code forControlTempalate/ItemTemplate of ListBox.


Listview从列表框控件派生。
最重要的区别是listview默认使用扩展选择模式。 listview还添加了一个名为view的属性,该属性使您能够以比自定义项目面板更丰富的方式自定义视图。
带有gridview的listview的一个现实示例是文件浏览器的详细信息视图。
具有网格视图的Listview是功能较弱的数据网格。
引入数据网格控件后,listview失去了重要性。