У чому різниця між ListBox та ListView


200

Яка різниця між ListBox WPF і ListView? Я не можу знайти жодної суттєвої різниці в їх властивостях. Чи є різні типові способи використання?

Відповіді:


213

A ListViewв основному схожий на ListBox(і успадковується від нього), але він також має Viewвластивість. Ця властивість дозволяє вказати заздалегідь заданий спосіб відображення елементів. Єдиний заздалегідь заданий вигляд у BCL ( Бібліотека базових класів ) GridView, але ви можете легко створити свій власний .

Ще одна відмінність полягає у режимі вибору за замовчуванням: це Singleдля a ListBox, але Extendedдля aListView


33

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

Нормальний

Перегляд миші: Перегляд 1 вище XAML

Наведіть мишку

Якщо ви спробуєте досягти вище в ListBox, можливо, ви в кінцевому підсумку пишете набагато більше коду для ControlTempalate/ ItemTemplateз ListBox.


Розділ Code Behind не є дійсним кодом станом на 2019-04-29 (додаткова дужка закриття та UpgradeProperty). Чи можна це виправити?
Фредерік

2
Це вже правильно. UpdateProperty - це спосіб сповіщення про змінену властивість. Для вас це може бути абсолютно різним. Використовуйте те, де метод, який ви використовуєте для сповіщення властивості, змінився. і який додатковий брекет?
Kylo Ren

Ну дякую за пояснення. І ти маєш рацію. Я здогадуюсь, що мене зачарували дужки. Справді немає додаткових брекетів. Я зроблю невеликий перегляд коду, хоча, якщо ви згодні.
Фредерік

9

Listview виходить з управління списком. Однією з найважливіших відмінностей є перегляд списку, який використовує розширений режим вибору за умовчанням. listview також додає властивість під назвою view, яка дозволяє вам налаштувати подання багатшим способом, ніж спеціальна панель елементів. Одним із реальних прикладів перегляду списків із переглядом сітки є перегляд деталей провідника файлів. Listview з сіткою - це менш потужна сітка даних. Після введення Datagrid управління listview втратило своє значення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.