ListBoxとListViewの違いは何ですか


198

WPFのListBoxとListViewの違いは何ですか?物性に大きな違いは見当たりません。典型的な使用法はありますか?

回答:


211

A ListViewは基本的にaに似ていますListBox(そしてそれから継承します)が、Viewプロパティもあります。このプロパティを使用すると、アイテムを表示する定義済みの方法を指定できます。BCL(基本クラスライブラリ)で定義済みのビューは1つだけGridViewですが、独自のビューを簡単に作成できます

もう1つの違いは、デフォルトの選択モードです。これはのSingleためのものListBoxですがExtendedListView


32

ListViewセットを定義して、definedを使用しての表示を制御viewsするネイティブな方法(WPF bindingサポート)を提供します。ListViewviews

例:

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

正常

MouseOverビュー:上記のビュー1 XAML

マウスオーバー

上記でを達成しようとするとListBox、おそらくControlTempalate/ / ItemTemplateのコードが大幅に増えることになりますListBox


コードビハインドセクションは、2019-04-29の時点で有効なコードではありません(追加の括弧とUpgradeProperty)。修正できますか?
フレデリック

2
それはすでに正しいです。UpdatePropertyは、プロパティの変更を通知するメソッドです。それはあなたにとって完全に異なる場合があります。プロパティが変更されたことを通知するために使用している方法を使用します。そして、どの余分なブレースですか?
Kylo Ren

さて説明ありがとうございます。そして、あなたは正しいです。私はブレースの場所に魅了されたと思います。確かに余分なブレースはありません。あなたが同意するなら、私は少しコードを再検討させます。
フレデリック

9

リストビューはリストボックスコントロールから派生します。最も重要な違いの1つは、listviewがデフォルトで拡張選択モードを使用することです。listviewには、viewという名前のプロパティも追加されます。これにより、カスタムアイテムパネルよりも豊富な方法でビューをカスタマイズできます。gridviewを使用したlistviewの実際の例の1つは、ファイルエクスプローラーの詳細ビューです。グリッドビュー付きのリストビューは、それほど強力ではないデータグリッドです。データグリッドコントロールの導入後、リストビューの重要性は失われました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.