ITypedList Interface

Definição

Fornece funcionalidade para descobrir o esquema de uma lista associável, em que as propriedades disponíveis para associação diferem das propriedades públicas do objeto a que se associar.

public interface class ITypedList
public interface ITypedList
type ITypedList = interface
Public Interface ITypedList
Derivado

Exemplos

O exemplo de código a seguir demonstra como implementar a interface ITypedList. Um tipo genérico chamado SortableBindingList deriva da BindingList<T> classe e implementa a ITypedList interface. Para obter uma listagem de código completa, consulte Como implementar a interface ITypedList.

using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace ITypedListCS;

[Serializable()]
public class SortableBindingList<T> : BindingList<T>, ITypedList
{
    [NonSerialized()]
    readonly PropertyDescriptorCollection properties;

    public SortableBindingList() : base()
    {
        // Get the 'shape' of the list. 
        // Only get the public properties marked with Browsable = true.
        PropertyDescriptorCollection pdc = TypeDescriptor.GetProperties(
            typeof(T),
            [new BrowsableAttribute(true)]);

        // Sort the properties.
        properties = pdc.Sort();
    }

    #region ITypedList Implementation

    public PropertyDescriptorCollection GetItemProperties(PropertyDescriptor[] listAccessors)
    {
        PropertyDescriptorCollection pdc;

        if (listAccessors != null && listAccessors.Length > 0)
        {
            // Return child list shape.
            pdc = ListBindingHelper.GetListItemProperties(listAccessors[0].PropertyType);
        }
        else
        {
            // Return properties in sort order.
            pdc = properties;
        }

        return pdc;
    }

    // This method is only used in the design-time framework 
    // and by the obsolete DataGrid control.
    public string GetListName(PropertyDescriptor[] listAccessors) => typeof(T).Name;

    #endregion
}
Imports System.ComponentModel
Imports System.Collections.Generic
Imports System.Windows.Forms

<Serializable()> _
Public Class SortableBindingList(Of Tkey)
    Inherits BindingList(Of Tkey)
    Implements ITypedList

    <NonSerialized()> _
    Private properties As PropertyDescriptorCollection

    Public Sub New()
        MyBase.New()

        ' Get the 'shape' of the list. 
        ' Only get the public properties marked with Browsable = true.
        Dim pdc As PropertyDescriptorCollection = TypeDescriptor.GetProperties(GetType(Tkey), New Attribute() {New BrowsableAttribute(True)})

        ' Sort the properties.
        properties = pdc.Sort()

    End Sub

#Region "ITypedList Implementation"

    Public Function GetItemProperties(ByVal listAccessors() As System.ComponentModel.PropertyDescriptor) As System.ComponentModel.PropertyDescriptorCollection Implements System.ComponentModel.ITypedList.GetItemProperties

        Dim pdc As PropertyDescriptorCollection

        If (Not (listAccessors Is Nothing)) And (listAccessors.Length > 0) Then
            ' Return child list shape
            pdc = ListBindingHelper.GetListItemProperties(listAccessors(0).PropertyType)
        Else
            ' Return properties in sort order
            pdc = properties
        End If

        Return pdc

    End Function

    ' This method is only used in the design-time framework 
    ' and by the obsolete DataGrid control.
    Public Function GetListName( _
    ByVal listAccessors() As PropertyDescriptor) As String _
    Implements System.ComponentModel.ITypedList.GetListName

        Return GetType(Tkey).Name

    End Function

#End Region

End Class

Comentários

Use essa interface se, por exemplo, você estiver usando um DataView objeto que representa uma customer tabela, quiser associar às propriedades no customer objeto que representa DataView , não às propriedades do DataView.

Essa interface não é necessária para o suporte de tempo de design de uma lista associável.

A associação aos dados pode ocorrer em tempo de execução ou em um designer, mas há regras para ambos. Em tempo de execução, você pode associar dados em qualquer um dos seguintes:

  • Array

  • Implementador de IList, desde que o implementador tenha uma propriedade fortemente tipada Item[] (ou seja, o Type é tudo menos Object). Você pode fazer isso fazendo a implementação padrão de Item[] particular. Se você quiser criar um IList que siga as regras de uma coleção fortemente tipada, você deverá derivar de CollectionBase.

  • Implementador de ITypedList.

Em um designer, você pode inicializar a associação a Component objetos seguindo as mesmas regras.

Para obter mais informações sobre como associar a uma fonte de dados, consulte a System.Windows.Forms.Binding classe.

Métodos

Nome Description
GetItemProperties(PropertyDescriptor[])

Retorna o PropertyDescriptorCollection que representa as propriedades em cada item usado para associar dados.

GetListName(PropertyDescriptor[])

Retorna o nome da lista.

Aplica-se a

Confira também