Qual é a diferença entre ListBox e ListView

198

Qual é a diferença entre o ListBox do WPF e o ListView? Não consigo encontrar nenhuma diferença significativa em suas propriedades. Existe um uso típico diferente?

Rasto
fonte

Respostas:

211

A ListViewé basicamente como um ListBox(e herda dele), mas também tem uma Viewpropriedade. Esta propriedade permite especificar uma maneira predefinida de exibir os itens. A única visualização predefinida na BCL ( Base Class Library ) é GridView, mas você pode criar facilmente a sua própria .

Outra diferença é o modo de seleção padrão: é Singlepara um ListBox, mas Extendedpara umListView

Thomas Levesque
fonte
32

Uma ListViewpermitem definir um conjunto de viewspara-lo e dá-lhe uma forma nativa ( WPF bindingsuporte) para controlar a exibição de ListViewpor usando definido views.

Exemplo:

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

RESULTADO:

Vista normal: Vista 2 acima XAML

Normal

Vista MouseOver: Vista 1 acima XAML

Passe o rato por cima

Se você tentar alcançar acima em a ListBox, provavelmente acabará escrevendo muito mais código para ControlTempalate/ ItemTemplatede ListBox.

Kylo Ren
fonte
A seção Code Behind não é um código válido a partir de 29/04/2019 (chave de fechamento extra e UpgradeProperty). Pode ser corrigido?
Frederic
2
Já está correto. UpdateProperty é um método para notificar a propriedade alterada. Pode ser totalmente diferente para você. Use qualquer método que esteja usando para notificar a propriedade alterada. e qual chave extra?
Kylo Ren
Bem, obrigado pela explicação. E você está certo. Eu acho que fiquei fascinado com os locais das chaves. De fato, não há aparelhos extras. Vou criar um pouco de código novamente, se você concordar.
Frederic
9

O Listview deriva do controle da caixa de listagem. Uma diferença mais importante é que o listview usa o modo de seleção estendida por padrão. O listview também adiciona uma propriedade chamada view, que permite personalizar a visualização de uma maneira mais rica do que um painel de itens personalizado. Um exemplo real de listview com gridview é a visualização de detalhes do explorador de arquivos. Listview com exibição em grade é uma grade de dados menos poderosa. Após a introdução do controle datagrid, o listview perdeu sua importância.

iaminvinicble
fonte