次の方法で共有


ListView の概要

ListView コントロールは、異なるレイアウトまたはビューを使用して一連のデータ項目を表示するインフラストラクチャを提供します。 たとえば、ユーザーはテーブル内のデータ項目を表示したり、列を並べ替えたりすることができます。

この記事で参照されている型については、「Code リファレンス」セクションを参照してください。

ListView とは

ListViewListBoxから派生します。 通常、その項目はデータ コレクションのメンバーであり、ListViewItem オブジェクトとして表されます。 ListViewItemContentControl であり、1 つの子要素のみを含めることができます。 ただし、その子要素には任意のビジュアル要素を指定できます。

ListView のビュー モードの定義

ListView コントロールのコンテンツの表示モードを指定するには、View プロパティを設定します。 Windows Presentation Foundation (WPF) で提供されるビュー モードの 1 つは、カスタマイズ可能な列を含むテーブル内のデータ項目のコレクションを表示する GridViewです。

次の例は、従業員情報を表示する GridView コントロールの ListView を定義する方法を示しています。


<ListView ItemsSource="{Binding Source={StaticResource EmployeeInfoDataSource}}">

    <ListView.View>

        <GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Employee Information">

            <GridViewColumn DisplayMemberBinding="{Binding Path=FirstName}" Header="First Name" Width="100"/>

            <GridViewColumn DisplayMemberBinding="{Binding Path=LastName}" Width="100">
                <GridViewColumnHeader>Last Name
                    <GridViewColumnHeader.ContextMenu>
                        <ContextMenu MenuItem.Click="LastNameCM_Click" Name="LastNameCM">
                            <MenuItem Header="Ascending" />
                            <MenuItem Header="Descending" />
                        </ContextMenu>
                    </GridViewColumnHeader.ContextMenu>
                </GridViewColumnHeader>
            </GridViewColumn>

            <GridViewColumn DisplayMemberBinding="{Binding Path=EmployeeNumber}" Header="Employee No." Width="100"/>
        </GridView>

    </ListView.View>
</ListView>

次の図は、前の例のデータがどのように表示されるかを示しています。

GridView 出力を含む ListView を示すスクリーンショット。

ViewBase クラスから継承するクラスを定義することで、カスタム ビュー モードを作成できます。 ViewBase クラスは、カスタム ビューを作成するために必要なインフラストラクチャを提供します。 カスタム ビューを作成する方法の詳細については、「ListViewのカスタム ビュー モードを作成する を参照してください。

ListView へのデータのバインド

Items プロパティと ItemsSource プロパティを使用して、ListView コントロールの項目を指定します。 次の例では、ItemsSource プロパティを EmployeeInfoDataSourceというデータ コレクションに設定します。

<ListView ItemsSource="{Binding Source={StaticResource EmployeeInfoDataSource}}">

GridViewでは、GridViewColumn オブジェクトは指定されたデータ フィールドにバインドされます。 次の例では、GridViewColumn プロパティの Binding を指定して、DisplayMemberBinding オブジェクトをデータ フィールドにバインドします。

GridViewColumn gvc1 = new GridViewColumn();
gvc1.DisplayMemberBinding = new Binding("FirstName");
gvc1.Header = "FirstName";
gvc1.Width = 100;
Dim gvc1 As New GridViewColumn()
gvc1.DisplayMemberBinding = New Binding("FirstName")
gvc1.Header = "FirstName"
gvc1.Width = 100
<GridViewColumn DisplayMemberBinding="{Binding Path=FirstName}" Header="First Name" Width="100"/>

列のセルのスタイルを設定するために使用する Binding 定義の一部として、DataTemplate を指定することもできます。 次の例では、DataTemplate で識別される ResourceKey は、BindingGridViewColumn を設定します。 この例では、DisplayMemberBindingよりも優先されるため、CellTemplate は定義されません。

<DataTemplate x:Key="myCellTemplateMonth">
  <DockPanel>
    <TextBlock Foreground="DarkBlue" HorizontalAlignment="Center">
      <TextBlock.Text>
        <Binding Path="Month"/>
      </TextBlock.Text>
    </TextBlock>
  </DockPanel>
</DataTemplate>
<GridViewColumn Header="Month" Width="80"
      CellTemplate="{StaticResource myCellTemplateMonth}"/>

GridView を実装する ListView のスタイル設定

ListView コントロールには、表示されるデータ項目を表す ListViewItem オブジェクトが含まれています。 次のプロパティを使用して、データ項目のコンテンツとスタイルを定義できます。

GridView内のセル間の配置の問題を回避するには、ItemContainerStyle を使用してプロパティを設定したり、ListView内の項目の幅に影響するコンテンツを追加したりしないでください。 たとえば、MarginItemContainerStyle プロパティを設定すると、配置の問題が発生する可能性があります。 プロパティを指定したり、GridView内の項目の幅に影響を与えるコンテンツを定義したりするには、GridView クラスとその関連クラスのプロパティ (GridViewColumnなど) を使用します。

GridView とそのサポート クラスの使用方法の詳細については、「GridView Overview」を参照してください。

ItemContainerStyle コントロールの ListView を定義し、ItemTemplateも定義する場合は、ContentPresenter が正しく機能するためには、スタイルに ItemTemplate を含める必要があります。

HorizontalContentAlignmentによって表示される VerticalContentAlignment コンテンツには、ListView プロパティと GridView プロパティを使用しないでください。 GridViewの列内のコンテンツの配置を指定するには、CellTemplateを定義します。

同じビュー モードの共有

2 つの ListView コントロールで同じビュー モードを同時に共有することはできません。 複数の ListView コントロールで同じビュー モードを使用しようとすると、例外が発生します。

複数の ListViewで同時に使用できるビュー モードを指定するには、テンプレートまたはスタイルを使用します。

カスタム ビュー モードの作成

GridView などのカスタマイズされたビューは、ViewBase 抽象クラスから派生し、ListViewItem オブジェクトとして表されるデータ項目を表示するツールを提供します。

コード リファレンス

この記事では、次のオブジェクトを参照します。

  • EmployeeInfoDataSource データ コレクション。 Visual Basic .NET を使用している場合、Window 要素はコード例に示されているものとは少し異なって宣言されます。

    <Window x:Class="SDKSample.Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Loaded="OnLoad"
            xmlns:ds="clr-namespace:SDKSample">
    
        <Window.Resources>
            <ObjectDataProvider x:Key="EmployeeInfoDataSource" ObjectType="{x:Type ds:myEmployees}" />
        </Window.Resources>
    
  • EmployeeInfo クラス。EmployeeInfoDataSource データコレクションの型として使用されます。

    public class EmployeeInfo
    {
        private string _firstName;
        private string _lastName;
        private string _employeeNumber;
    
        public string FirstName
        {
            get {return _firstName;}
            set {_firstName = value;}
        }
    
        public string LastName
        {
            get {return _lastName;}
            set {_lastName = value;}
        }
    
        public string EmployeeNumber
        {
            get {return _employeeNumber;}
            set {_employeeNumber = value;}
        }
    
        public EmployeeInfo(string firstname, string lastname, string empnumber)
        {
            _firstName = firstname;
            _lastName = lastname;
            _employeeNumber = empnumber;
        }
    }
    
    Public Class EmployeeInfo
        Private _firstName As String
        Private _lastName As String
        Private _employeeNumber As String
    
        Public Property FirstName() As String
            Get
                Return _firstName
            End Get
            Set(ByVal value As String)
                _firstName = value
            End Set
        End Property
    
        Public Property LastName() As String
            Get
                Return _lastName
            End Get
            Set(ByVal value As String)
                _lastName = value
            End Set
        End Property
    
        Public Property EmployeeNumber() As String
            Get
                Return _employeeNumber
            End Get
            Set(ByVal value As String)
                _employeeNumber = value
            End Set
        End Property
    
        Public Sub New(ByVal firstname As String, ByVal lastname As String, ByVal empnumber As String)
            _firstName = firstname
            _lastName = lastname
            _employeeNumber = empnumber
        End Sub
    End Class
    

こちらも参照ください