ListBox和ListView之间的区别是什么

时间:2011-01-16 03:30:08

标签: .net wpf wpf-controls

WPF的ListBox和ListView有什么区别?我发现他们的属性没有任何显着差异。有不同的典型用途吗?

3 个答案:

答案 0 :(得分:196)

ListView基本上类似于ListBox(并从中继承),但它也有View属性。此属性允许您指定显示项目的预定义方式。 BCL中唯一预定义的视图(Base Class Library)为GridView,但您可以轻松create your own

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

答案 1 :(得分:25)

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}中的{2}

Normal

MouseOver查看:查看以上XAML

中的1

Mouse Over

  

如果您尝试在XAML中实现上述目标,可能最终会为ListBox / ControlTempalate {{1}编写更多代码}}

答案 2 :(得分:6)

Listview派生自列表框控件。 一个最重要的区别是listview默认使用扩展选择模式。 listview还添加了一个名为view的属性,使您可以以比自定义itemspanel更丰富的方式自定义视图。 使用gridview的listview的一个真实例子是文件资源管理器的详细信息视图。 带有网格视图的Listview是一个功能较弱的数据网格。 引入datagrid后,listview失去了它的重要性。