ListView コントロールは、異なるレイアウトまたはビューを使用して一連のデータ項目を表示するインフラストラクチャを提供します。 たとえば、ユーザーはテーブル内のデータ項目を表示したり、列を並べ替えたりすることができます。
注
この記事で参照されている型については、「Code リファレンス」セクションを参照してください。
ListView とは
ListView は ListBoxから派生します。 通常、その項目はデータ コレクションのメンバーであり、ListViewItem オブジェクトとして表されます。 ListViewItem は ContentControl であり、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>
次の図は、前の例のデータがどのように表示されるかを示しています。
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 は、Bindingの GridViewColumn を設定します。 この例では、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 オブジェクトが含まれています。 次のプロパティを使用して、データ項目のコンテンツとスタイルを定義できます。
ListView コントロールで、ItemTemplate、ItemTemplateSelector、および ItemContainerStyle プロパティを使用します。
ListViewItem コントロールで、ContentTemplate プロパティと ContentTemplateSelector プロパティを使用します。
GridView内のセル間の配置の問題を回避するには、ItemContainerStyle を使用してプロパティを設定したり、ListView内の項目の幅に影響するコンテンツを追加したりしないでください。 たとえば、Marginで ItemContainerStyle プロパティを設定すると、配置の問題が発生する可能性があります。 プロパティを指定したり、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
こちらも参照ください
.NET Desktop feedback