Sdílet prostřednictvím


ListView – přehled

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

Poznámka:

Odkazované typy v tomto článku jsou k dispozici v referenční části kódu.

Co je ListView?

ListView se odvozuje z ListBox. Obvykle jsou jeho položky členy kolekce dat a jsou reprezentovány jako ListViewItem objekty. ListViewItem je ContentControl a 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 ovládacího prvku ListView, nastavíte vlastnost View. Jeden režim zobrazení, který Windows Presentation Foundation (WPF) poskytuje, je GridView, který zobrazuje kolekci datových položek v tabulce s přizpůsobitelnými sloupci.

Následující příklad ukazuje, jak definovat GridView pro ovládací prvek ListView, 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.

snímek obrazovky, který zobrazuje ListView s výstupem GridView

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

Pomocí vlastností Items a ItemsSource určete položky pro ovládací prvek ListView. Následující příklad nastaví vlastnost ItemsSource na kolekci dat nazvanou EmployeeInfoDataSource.

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

V GridViewa GridViewColumn se objekty vážou na zadaná datová pole. Následující příklad vytvoří vazbu GridViewColumn objektu na datové pole zadáním Binding pro DisplayMemberBinding vlastnost.

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 definice DataTemplate, kterou používáte ke stylu buněk ve sloupci. V následujícím příkladu DataTemplate identifikovaný jako ResourceKey nastaví Binding pro GridViewColumn. Všimněte si, že tento příklad nedefinuje DisplayMemberBinding, protože jeho definování by mělo 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 ListViewu, který implementuje GridView

Ovládací prvek ListView obsahuje ListViewItem objekty, které představují zobrazené datové položky. 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 GridView, nepoužívejte ItemContainerStyle k nastavení vlastností nebo přidání obsahu, který ovlivňuje šířku položky v ListView. Například k problému zarovnání může dojít při nastavení vlastnosti Margin v ItemContainerStyle. Chcete-li zadat vlastnosti nebo definovat obsah, který má vliv na šířku položek v GridView, použijte vlastnosti třídy GridView a souvisejících tříd, například GridViewColumn.

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

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

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

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

Dva ovládací prvky ListView nemůžou současně sdílet stejný režim zobrazení. Pokud se pokusíte použít stejný režim zobrazení s více než jedním ListView ovládacím prvku, 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í kód

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 Window deklarován mírně odlišně od toho, 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 kolekci dat 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
    

Viz také