ListView 개요
ListView 컨트롤은 다양한 레이아웃이나 뷰를 사용해서 데이터 항목 세트를 표시하기 위한 인프라를 제공합니다. 예를 들어 사용자가 데이터 항목을 표에 표시하고 해당 열을 정렬해야 할 수도 있습니다.
참고
이 문서에서 참조하는 형식은 코드 참조 섹션에서 사용할 수 있습니다.
ListView란?
ListView는 ListBox에서 파생됩니다. 일반적으로 해당 항목은 데이터 컬렉션의 멤버이며 ListViewItem 개체로 표시됩니다. ListViewItem은 ContentControl이며 단일 자식 요소만 포함할 수 있습니다. 하지만 자식 요소는 모든 시각적 요소가 될 수 있습니다.
ListView의 뷰 모드 정의
ListView 컨트롤의 콘텐츠에 대한 뷰 모드를 지정하려면 View 속성을 설정합니다. WPF(Windows Presentation Foundation)가 제공하는 뷰 모드 중 하나는 GridView이며 사용자 지정 가능한 열이 있는 테이블에 데이터 항목 모음을 표시합니다.
다음 예제에서는 직원 정보를 표시하는 ListView 컨트롤에 대해 GridView를 정의하는 방법을 보여줍니다.
<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 개체는 지정된 데이터 필드에 바인딩됩니다. 다음 예제에서는 DisplayMemberBinding 속성에 Binding을 지정하여 GridViewColumn 개체를 데이터 필드에 바인딩합니다.
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"/>
열의 셀 스타일을 지정하는 데 사용하는 DataTemplate 정의의 일부로 Binding을 지정할 수도 있습니다. 다음 예제에서 ResourceKey로 식별되는 DataTemplate은 GridViewColumn에 대한 Binding을 설정합니다. 이 예제에서는 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의 항목 너비에 영향을 주는 콘텐츠를 추가하지 마십시오. 예를 들어, ItemContainerStyle에 Margin 속성을 설정하면 정렬 문제가 발생할 수 있습니다. GridView의 항목 너비에 영향을 주는 콘텐츠를 정의하거나 속성을 지정하려면 GridView 클래스의 속성과 GridViewColumn 등의 관련 클래스를 사용합니다.
GridView 및 지원 클래스를 사용하는 방법에 대한 자세한 내용은 GridView 개요를 참조하세요.
ListView 컨트롤에 대해 ItemContainerStyle을 정의하고 ItemTemplate도 정의하는 경우 ItemTemplate이 올바르게 작동하려면 스타일에 ContentPresenter를 포함해야 합니다.
GridView가 표시하는 ListView 콘텐츠에 대해서는 HorizontalContentAlignment 및 VerticalContentAlignment속성을 사용하지 마세요. 열에서 콘텐츠의 맞춤을 지정 하는 GridView, 정의 CellTemplate합니다.
같은 뷰 모드 공유
두 개의 ListView 컨트롤에서 동시에 같은 뷰 모드를 공유할 수 없습니다. 둘 이상의 ListView 컨트롤에 같은 뷰 모드를 사용하려고 하면 예외가 발생합니다.
둘 이상의 ListView가 동시에 사용할 수 있는 뷰 모드를 지정하려면 템플릿이나 스타일을 사용합니다.
사용자 지정 보기 모드 만들기
GridView와 같은 사용자 지정 뷰는 ListViewItem 개체로 표시되는 데이터 항목을 표시하는 도구를 제공하는 ViewBase 추상 클래스에서 파생됩니다.
코드 참조
이 문서에서는 다음 개체를 참조합니다.
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