Aracılığıyla paylaş


ListView'a Genel Bakış

ListView denetimi, içinde farklı bir düzen veya görünüm kullanarak bir dizi veri öğesini görüntülemek için altyapı sağlar. Örneğin, bir kullanıcı tablodaki veri öğelerini görüntülemek ve sütunlarını sıralamak isteyebilir.

Uyarı

Bu makalede atıfta bulunulan türler Kod referansı bölümünde bulunabilir.

ListView nedir?

ListView, ListBox'den türetilir. Genellikle, öğeleri bir veri koleksiyonuna dahildir ve ListViewItem nesneler olarak temsil edilir. ListViewItem bir ContentControl ve yalnızca tek bir alt öğe içerebilir. Ancak bu alt bileşen herhangi bir görsel öğe olabilir.

ListView için Görünüm Modu Tanımlama

ListView denetiminin içeriği için bir görünüm modu belirtmek için View özelliğini ayarlarsınız. Windows Presentation Foundation'ın (WPF) sağladığı bir görünüm modu GridView, özelleştirilebilir sütunları olan bir tablodaki veri öğeleri koleksiyonunu görüntüler.

Aşağıdaki örnekte, çalışan bilgilerini görüntüleyen bir GridView denetimi için ListView nasıl tanımlanacağı gösterilmektedir.


<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>

Aşağıdaki çizimde, önceki örnekte verilerin nasıl göründüğü gösterilmektedir.

GridView çıktısı içeren ListView'ü gösteren ekran görüntüsü.

ViewBase sınıfından devralan bir sınıf tanımlayarak özel görünüm modu oluşturabilirsiniz. ViewBase sınıfı, özel görünüm oluşturmak için ihtiyacınız olan altyapıyı sağlar. Özel görünüm oluşturma hakkında daha fazla bilgi için bkz. ListViewiçin Özel Görünüm Modu Oluşturma.

ListView'a Veri Bağlama

Items denetimi için öğeleri belirtmek için ItemsSource ve ListView özelliklerini kullanın. Aşağıdaki örnek, ItemsSource özelliğini EmployeeInfoDataSourceadlı bir veri koleksiyonuna ayarlar.

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

GridView GridViewColumn nesneleri belirtilen veri alanlarına bağlanır. Aşağıdaki örnek, GridViewColumn özelliği için bir Binding belirterek bir DisplayMemberBinding nesnesini veri alanına bağlar.

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"/>

Sütundaki hücrelere stil uygulamak için kullandığınız bir Binding tanımının parçası olarak da bir DataTemplate belirtebilirsiniz. Aşağıdaki örnekte, DataTemplate ile tanımlanan ResourceKey, Bindingiçin GridViewColumn'yi belirler. Bu örnekte DisplayMemberBinding tanımlanmadığına dikkat edin çünkü bunu yapmak CellTemplate'den önceliklidir.

<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 Uygulayan ListView'e Stil Verme

ListView denetimi, görüntülenen veri öğelerini temsil eden ListViewItem nesneleri içerir. Veri öğelerinin içeriğini ve stilini tanımlamak için aşağıdaki özellikleri kullanabilirsiniz:

GridViewhücreler arasında hizalama sorunlarını önlemek için, ItemContainerStyle özelliklerini ayarlamak veya ListViewbir öğenin genişliğini etkileyen içerik eklemek için kullanmayın. Örneğin, MarginItemContainerStyle özelliğini ayarladığınızda bir hizalama sorunu oluşabilir. bir GridViewiçindeki öğelerin genişliğini etkileyen özellikleri belirtmek veya içerik tanımlamak için GridView sınıfının ve GridViewColumngibi ilgili sınıflarının özelliklerini kullanın.

GridView ve destekleyici sınıflarını kullanma hakkında daha fazla bilgi için bkz. GridView'a Genel Bakış.

ItemContainerStyle denetimi için bir ListView tanımlarsanız ve aynı zamanda bir ItemTemplatetanımlarsanız, ContentPresenter düzgün çalışması için stile bir ItemTemplate eklemeniz gerekir.

HorizontalContentAlignmenttarafından görüntülenen VerticalContentAlignment içerik için ListView ve GridView özelliklerini kullanmayın. bir GridViewsütunundaki içeriğin hizalamasını belirtmek için bir CellTemplatetanımlayın.

Aynı Görünüm Modunu Paylaşma

İki ListView denetimi aynı görünüm modunu aynı anda paylaşamaz. Aynı görünüm modunu birden fazla ListView denetimiyle kullanmaya çalışırsanız bir özel durum oluşur.

Birden fazla ListViewtarafından aynı anda kullanılabilecek bir görünüm modu belirtmek için şablonları veya stilleri kullanın.

Özel Görünüm Modu Oluşturma

GridView gibi özelleştirilmiş görünümler, ViewBase nesneler olarak temsil edilen veri öğelerini görüntülemek için araçlar sağlayan ListViewItem soyut sınıfından türetilir.

Kod referansı

Bu makalede aşağıdaki nesnelere başvurulmlanmıştır:

  • EmployeeInfoDataSource veri toplama. Visual Basic .NET kullanıyorsanız, Window öğesi örnek kodda gördüklerinizden biraz farklı bildirilir:

    <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 sınıfı, EmployeeInfoDataSource veri toplama için tür olarak kullanılır.

    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
    

Ayrıca bakınız