Share via


ListView – přehled

Ovládací ListView prvek poskytuje infrastrukturu pro zobrazení sady datových položek v jiném rozložení nebo zobrazení. Uživatel může například chtít zobrazit datové položky v tabulce a také řadit sloupce.

Poznámka:

Typy odkazované v tomto článku jsou k dispozici v části Odkaz na kód.

Co je ListView?

Odvozeno ListView od ListBox. Obvykle jsou jeho položky členy kolekce dat a jsou reprezentovány jako ListViewItem objekty. A ListViewItem je a ContentControl může obsahovat pouze jeden podřízený prvek. Tento podřízený prvek však může být libovolný vizuální prvek.

Definování režimu zobrazení pro ListView

Chcete-li určit režim zobrazení pro obsah ListView ovládacího prvku, nastavte View vlastnost. Jeden režim zobrazení, který windows Presentation Foundation (WPF) poskytuje je GridView, který zobrazuje kolekci datových položek v tabulce, která má přizpůsobitelné sloupce.

Následující příklad ukazuje, jak definovat GridView pro ListView ovládací prvek, který zobrazuje informace o zaměstnanci.


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

Následující obrázek ukazuje, jak se data zobrazují v předchozím příkladu.

Screenshot that shows a ListView with GridView output.

Vlastní režim zobrazení můžete vytvořit definováním třídy, která dědí z ViewBase třídy. Třída ViewBase poskytuje infrastrukturu, kterou potřebujete k vytvoření vlastního zobrazení. Další informace o tom, jak vytvořit vlastní zobrazení, naleznete v tématu Vytvoření vlastního režimu zobrazení pro ListView.

Vytvoření vazby dat k objektu ListView

K určení položek ListView ovládacího prvku použijte vlastnosti Items a ItemsSource vlastnosti. Následující příklad nastaví ItemsSource vlastnost na kolekci dat s názvem EmployeeInfoDataSource.

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

V objektech GridViewGridViewColumn jsou objekty vázány na zadaná datová pole. Následující příklad vytvoří vazbu objektu GridViewColumn na datové pole zadáním Binding vlastnosti 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"/>

Můžete také zadat Binding jako součást DataTemplate definice, kterou použijete ke stylu buněk ve sloupci. V následujícím příkladu DataTemplate identifikovaný s ResourceKey množinou Binding pro .GridViewColumn Všimněte si, že tento příklad nedefinuje DisplayMemberBinding , protože to dělá přednost před 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}"/>

Styling a ListView, který implementuje GridView

Ovládací ListView prvek obsahuje ListViewItem objekty, které představují datové položky, které jsou zobrazeny. K definování obsahu a stylu datových položek můžete použít následující vlastnosti:

Chcete-li zabránit problémům se zarovnáním mezi buňkami v objektu GridView, nepoužívejte ItemContainerStyle k nastavení vlastností nebo přidejte obsah, který ovlivňuje šířku položky v objektu ListView. Například k problému zarovnání může dojít při nastavení Margin vlastnosti v objektu ItemContainerStyle. Chcete-li zadat vlastnosti nebo definovat obsah, který ovlivňuje šířku položek v objektu GridView, použijte vlastnosti GridView třídy a jeho související třídy, například GridViewColumn.

Další informace o použití GridView a jejích podpůrných tříd naleznete v tématu GridView Overview.

Pokud definujete ItemContainerStyle ovládací ListView prvek a také definujete ItemTemplate, musíte zahrnout ContentPresenter do stylu, aby ItemTemplate správně fungoval.

HorizontalContentAlignment Nepoužívejte vlastnosti a VerticalContentAlignment vlastnosti pro ListView obsah zobrazený pomocí objektu GridView. Chcete-li určit zarovnání obsahu ve sloupci , GridViewdefinujte CellTemplate.

Sdílení stejného režimu zobrazení

Dva ListView ovládací prvky nemůžou současně sdílet stejný režim zobrazení. Pokud se pokusíte použít stejný režim zobrazení s více ovládacími ListView prvky, dojde k výjimce.

Chcete-li určit režim zobrazení, který může být současně používán více než jedním ListView, použijte šablony nebo styly.

Vytvoření vlastního režimu zobrazení

Přizpůsobená zobrazení, jako GridView jsou odvozena z ViewBase abstraktní třídy, která poskytuje nástroje pro zobrazení datových položek reprezentovaných jako ListViewItem objekty.

Referenční dokumentace kódu

Na následující objekty se odkazuje v tomto článku:

  • EmployeeInfoDataSource shromažďování dat. Pokud používáte visual basic .NET, je prvek deklarován mírně odlišně od toho, Window co vidíte v ukázkovém kódu:

    <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 třída, která se používá jako typ pro EmployeeInfoDataSource shromažďování dat.

    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
    

Viz také