다음을 통해 공유


ListView 개요

ListView 컨트롤은 다양한 레이아웃이나 뷰를 사용해서 데이터 항목 세트를 표시하기 위한 인프라를 제공합니다. 예를 들어 사용자가 데이터 항목을 표에 표시하고 해당 열을 정렬해야 할 수도 있습니다.

참고

이 문서에서 참조하는 형식은 코드 참조 섹션에서 사용할 수 있습니다.

ListView란?

ListViewListBox에서 파생됩니다. 일반적으로 해당 항목은 데이터 컬렉션의 멤버이며 ListViewItem 개체로 표시됩니다. ListViewItemContentControl이며 단일 자식 요소만 포함할 수 있습니다. 하지만 자식 요소는 모든 시각적 요소가 될 수 있습니다.

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>

다음 그림에서는 이전 예제의 데이터가 표시되는 방법을 보여 줍니다.

GridView 출력이 있는 ListView를 보여주는 스크린샷.

ViewBase 클래스에서 상속되는 클래스를 정의하여 사용자 지정 뷰 모드를 만들 수 있습니다. ViewBase 클래스는 사용자 지정 뷰를 만드는 데 필요한 인프라를 제공합니다. 사용자 지정 뷰를 만드는 방법에 대한 자세한 내용은 ListView의 사용자 지정 뷰 모드 만들기를 참조하세요.

ListView에 데이터 바인딩

ItemsItemsSource 속성을 사용하여 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로 식별되는 DataTemplateGridViewColumn에 대한 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 개체가 포함됩니다. 다음 속성을 사용하여 데이터 항목의 콘텐츠 및 스타일을 정의할 수 있습니다.

GridView에서 셀 사이의 정렬 문제가 발생하지 않도록 하려면 ItemContainerStyle을 사용하여 속성을 설정하거나 ListView의 항목 너비에 영향을 주는 콘텐츠를 추가하지 마십시오. 예를 들어, ItemContainerStyleMargin 속성을 설정하면 정렬 문제가 발생할 수 있습니다. GridView의 항목 너비에 영향을 주는 콘텐츠를 정의하거나 속성을 지정하려면 GridView 클래스의 속성과 GridViewColumn 등의 관련 클래스를 사용합니다.

GridView 및 지원 클래스를 사용하는 방법에 대한 자세한 내용은 GridView 개요를 참조하세요.

ListView 컨트롤에 대해 ItemContainerStyle을 정의하고 ItemTemplate도 정의하는 경우 ItemTemplate이 올바르게 작동하려면 스타일에 ContentPresenter를 포함해야 합니다.

GridView가 표시하는 ListView 콘텐츠에 대해서는 HorizontalContentAlignmentVerticalContentAlignment속성을 사용하지 마세요. 열에서 콘텐츠의 맞춤을 지정 하는 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
    

참고 항목