Megosztás a következőn keresztül:


ListView – áttekintés

A ListView vezérlő biztosítja az infrastruktúrát, amely egy adatelemkészletet jelenít meg egy másik elrendezés vagy nézet használatával. Előfordulhat például, hogy egy felhasználó meg szeretné jeleníteni az adatelemeket egy táblában, és rendezni szeretné az oszlopait is.

Megjegyzés:

A cikkben hivatkozott típusok a Kód hivatkozási szakaszban érhetők el.

Mi az a ListView?

A ListView a ListBox-ból származik. Az elemek általában egy adatgyűjtés tagjai, és ListViewItem objektumokként jelennek meg. A ListViewItem egy ContentControl, és csak egy gyermekelemet tartalmazhat. Ez a gyermekelem azonban bármilyen vizuális elem lehet.

Nézetmód definiálása ListView-hoz

Egy ListView vezérlőelem tartalmának nézetmódjának megadásához állítsa be a View tulajdonságot. A Windows Presentation Foundation (WPF) egyik nézetmódja a GridView, amely testre szabható oszlopokkal rendelkező táblázatban lévő adatelemek gyűjteményét jeleníti meg.

Az alábbi példa bemutatja, hogyan definiálhat GridView egy alkalmazotti adatokat megjelenítő ListView vezérlőelemhez.


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

Az alábbi ábra bemutatja, hogyan jelennek meg az adatok az előző példában.

GridView-kimenettel rendelkező ListView-t ábrázoló képernyőkép.

Egyéni nézetmódot az ViewBase osztálytól öröklő osztály definiálásával hozhat létre. A ViewBase osztály biztosítja az egyéni nézet létrehozásához szükséges infrastruktúrát. További információ az egyéni nézetek létrehozásáról: Egyéni nézetmód létrehozása ListView.

Adatok kötése ListView-hoz

A Items és ItemsSource tulajdonságok használatával adja meg a ListView vezérlőelem elemeit. Az alábbi példa a ItemsSource tulajdonságot egy EmployeeInfoDataSourcenevű adatgyűjtésre állítja be.

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

Egy GridViewGridViewColumn objektumok adott adatmezőkhöz kötődnek. Az alábbi példa egy GridViewColumn objektumot köt egy adatmezőhöz a Binding tulajdonsághoz tartozó DisplayMemberBinding megadásával.

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

Egy Binding is megadhat egy DataTemplate definíció részeként, amelyet az oszlop celláinak stílusához használ. Az alábbi példában a DataTemplate, amelyet a ResourceKey azonosított, beállítja a BindingGridViewColumn-jét. Vegyük figyelembe, hogy ez a példa nem határozza meg a DisplayMemberBinding-t, mert elsőbbséget élvez a CellTemplate-gyel szemben.

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

A ListView stílusozása, amely GridView-t valósít meg

A ListView vezérlőelem ListViewItem objektumokat tartalmaz, amelyek a megjelenített adatelemeket jelölik. Az adatelemek tartalmát és stílusát az alábbi tulajdonságok használatával határozhatja meg:

A GridViewcellái közötti igazítási problémák elkerülése érdekében ne használja a ItemContainerStyle olyan tulajdonságok beállítására vagy tartalom hozzáadására, amelyek befolyásolják a ListViewelemeinek szélességét. Igazítási probléma például akkor fordulhat elő, ha a Margin tulajdonságot a ItemContainerStyle-en belül állítja be. A GridViewelemeinek szélességét befolyásoló tulajdonságok megadásához vagy a tartalom meghatározásához használja a GridView osztály és annak kapcsolódó osztályainak tulajdonságait, például GridViewColumn.

A GridView és a segédosztályok használatáról a GridView áttekintésicímű cikkben talál további információt.

Ha meghatároz egy ItemContainerStyle egy ListView vezérlőelemhez, és definiál egy ItemTemplate-t is, a stílusban tartalmaznia kell egy ContentPresenter-at, hogy a ItemTemplate megfelelően működjön.

A HorizontalContentAlignmentáltal megjelenített VerticalContentAlignment tartalom ListView és GridView tulajdonságait ne használja. Ha meg szeretné adni a tartalom igazítását egy GridViewoszlopában, adja meg a CellTemplate-et.

Azonos nézetmód megosztása

Két ListView vezérlő nem oszthatja meg egyszerre ugyanazt a nézetmódot. Ha ugyanazt a nézetmódot egynél több ListView vezérlőelemmel próbálja használni, kivétel történik.

Több ListViewegyidejűleg használható nézetmód megadásához használjon sablonokat vagy stílusokat.

Egyéni nézetmód létrehozása

A GridView-hez hasonló testreszabott nézetek az ViewBase absztrakt osztályból származnak, amely lehetővé teszi az ListViewItem objektumként megjelenített adatelemek megjelenítését.

Kódreferencia

Ebben a cikkben a következő objektumokra hivatkozunk:

  • EmployeeInfoDataSource adatgyűjtés. Ha Visual Basic .NET-et használ, a Window elem deklarálása kissé eltér a példakódban láthatótól:

    <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 osztály, amely a EmployeeInfoDataSource adatgyűjtés típusaként használatos.

    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
    

Lásd még