ListBox ve ListView arasındaki fark nedir


200

WPF's ListBox ve ListView arasındaki fark nedir? Özelliklerinde önemli bir fark bulamıyorum. Farklı tipik kullanım var mı?

Yanıtlar:


213

A ListViewtemelde bir ListBox(ve ondan miras) gibidir, ama aynı zamanda bir Viewözelliği vardır. Bu özellik, öğeleri görüntülemek için önceden tanımlanmış bir yol belirtmenize olanak tanır. BCL'de ( Temel Sınıf Kütüphanesi ) önceden tanımlanmış tek görünüm GridView, ancak kendi görünümünüzü kolayca oluşturabilirsiniz .

Bir başka fark Varsayılan seçim modu: bu kadar Singlebir için ListBox, ama Extendedbir içinListView


33

Bunun için ListViewbir set tanımlamanıza viewsve tanımlı WPF bindinggörüntüyü ListViewkullanarak görüntüyü kontrol etmeniz için size yerel bir yol ( destek) verir views.

Misal:

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

ÇIKTI:

Normal Görünüm: Yukarıdaki 2'yi görüntüle XAML

Normal

MouseOver Görünümü: Yukarıdaki 1'i görüntüle XAML

Fare Üstü

Yukarıda a'ya ulaşmaya çalışırsanız ListBox, muhtemelen ControlTempalate/ ItemTemplateof için çok daha fazla kod yazacaksınız ListBox.


Arkasında Kod bölümü, 2019-04-29 tarihinden itibaren geçerli bir kod değildir (ekstra kapatma ayracı ve Yükseltme Özellikleri). Düzeltilebilir mi?
Frederic

2
Zaten doğru. UpdateProperty, değişen mülkleri bildiren bir yöntemdir. Sizin için tamamen farklı olabilir. Değişen özelliği bildirmek için kullandığınız yöntemi kullanın. ve hangi ekstra destek?
Kylo Ren

Açıklama için teşekkürler. Ve haklısın. Sanırım ayraç yerleri beni büyüledi. Gerçekten ekstra parantez yoktur. Eğer kabul ederseniz ben olsa küçük bir kod yeniden yapacak.
Frederic

9

Liste görünümü, liste kutusu denetiminden türetilir. En önemli farklardan biri liste görünümünde varsayılan olarak genişletilmiş seçim modunun kullanılmasıdır. listview ayrıca, görünümü özel bir öğe panelinden daha zengin bir şekilde özelleştirmenizi sağlayan görünüm adı verilen bir özellik ekler. Gridview ile listview uygulamasının gerçek bir örneği, dosya kaşifinin ayrıntılar görünümüdür. Izgara görünümü ile liste görünümü daha az güçlü bir veri ızgarasıdır. Datagrid kontrol liste görünümünden sonra önemini kaybetti.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.