ITypedList Interface
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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:
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. |