Was ist der Unterschied zwischen ListBox und ListView?

198

Was ist der Unterschied zwischen ListBox und ListView von WPF? Ich kann keinen signifikanten Unterschied in ihren Eigenschaften feststellen. Gibt es eine andere typische Verwendung?

Rasto
quelle

Antworten:

211

A ListViewist im Grunde wie a ListBox(und erbt davon), hat aber auch eine ViewEigenschaft. Mit dieser Eigenschaft können Sie eine vordefinierte Art der Anzeige der Elemente angeben. Die einzige vordefinierte Ansicht in der BCL ( Base Class Library ) ist GridView, aber Sie können ganz einfach Ihre eigene erstellen .

Ein weiterer Unterschied ist der Standardauswahlmodus: Es ist Singlefür a ListBox, aber Extendedfür aListView

Thomas Levesque
quelle
32

Mit A können ListViewSie eine Reihe von Elementen definieren viewsund auf native Weise ( WPF bindingUnterstützung) die Anzeige ListViewmithilfe von Defined steuern views.

Beispiel:

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

AUSGABE:

Normale Ansicht: Ansicht 2 oben XAML

Normal

MouseOver-Ansicht: Ansicht 1 oben XAML

Maus vorbei

Wenn Sie versuchen, oben in a zu erreichen ListBox, werden Sie wahrscheinlich viel mehr Code für ControlTempalate/ ItemTemplatevon schreiben ListBox.

Kylo Ren
quelle
Der Abschnitt Code Behind ist ab dem 29.04.2019 kein gültiger Code (zusätzliche schließende Klammer und UpgradeProperty). Kann es korrigiert werden?
Frederic
2
Es ist schon richtig. UpdateProperty ist eine Methode, um geänderte Eigenschaften zu benachrichtigen. Es kann für Sie völlig anders sein. Verwenden Sie die Methode, mit der Sie die geänderte Eigenschaft benachrichtigen. und welche zusätzliche Zahnspange?
Kylo Ren
Nun, danke für die Erklärung. Und du hast recht. Ich glaube, ich war fasziniert von den Positionen der Zahnspange. Es gibt in der Tat keine zusätzlichen Zahnspangen. Ich werde jedoch ein wenig Code neu suchen, wenn Sie damit einverstanden sind.
Frederic
9

Die Listenansicht stammt aus der Listbox-Steuerung. Ein wichtiger Unterschied ist, dass die Listenansicht standardmäßig den erweiterten Auswahlmodus verwendet. listview fügt außerdem eine Eigenschaft namens view hinzu, mit der Sie die Ansicht umfassender anpassen können als mit einem benutzerdefinierten Elementbereich. Ein reales Beispiel für eine Listenansicht mit Rasteransicht ist die Detailansicht des Datei-Explorers. Die Listenansicht mit Rasteransicht ist ein weniger leistungsfähiges Datenraster. Nach der Einführung der Datagrid-Steuerung verlor die Listenansicht an Bedeutung.

iaminvinicble
quelle