Visão geral das fontes de associação (WPF .NET)

Na associação de dados, o objeto de origem da associação refere-se ao objeto do qual você obtém dados. Este artigo aborda os tipos de objetos que você pode usar como a origem da associação, como objetos CLR do .NET, XML e DependencyObject objetos.

Tipos de origem de associação

Windows Presentation Foundation de dados (WPF) dá suporte aos seguintes tipos de origem de associação:

Implementar uma origem de associação em seus objetos

Seus objetos CLR podem se tornar fontes de associação. Há algumas coisas a serem cientes ao implementar uma classe para servir como uma origem de associação.

Fornecer notificações de alteração

Se você estiver usando ou associação OneWay , implemente TwoWay um mecanismo de notificação de "propriedade alterada" adequado. O mecanismo recomendado é que o CLR ou a classe dinâmica implemente a INotifyPropertyChanged interface . Para obter mais informações, consulte Como implementar a notificação de alteração de propriedade (.NET Framework).

Há duas maneiras de notificar um assinante de uma alteração de propriedade:

  1. Implemente a interface INotifyPropertyChanged.

    Esse é o mecanismo recomendado para notificações. O INotifyPropertyChanged fornece o PropertyChanged evento , que o sistema de associação respeita. Ao augar esse evento e fornecer o nome da propriedade que foi alterada, você notificará um destino de associação da alteração.

  2. Implemente o PropertyChanged padrão.

    Cada propriedade que precisa notificar um destino de associação de que ele foi alterado tem PropertyNameChanged um evento correspondente, PropertyName em que é o nome da propriedade. Você aciona o evento sempre que a propriedade é alterada.

Se a sua origem da associação implementa um desses mecanismos de notificação, as atualizações de destino ocorrem automaticamente. Se, por algum motivo, sua origem da associação não fornecer as notificações de propriedade alterada adequadas, UpdateTarget você poderá usar o método para atualizar a propriedade de destino explicitamente.

Outras características

A lista a seguir fornece outros pontos importantes a serem observados:

  • Objetos de dados que servem como fontes de associação podem ser declarados em XAML como recursos, desde que tenham um construtor sem parâmetros. Caso contrário, você deve criar o objeto de dados no código e atribuí-lo diretamente ao contexto de dados da árvore de objetos XAML ou como a origem da associação.

  • As propriedades usadas como propriedades de origem de associação devem ser propriedades públicas de sua classe. As propriedades de interface definidas explicitamente não podem ser acessadas para fins de associação, nem podem ser protegidas, privadas, internas ou virtuais que não têm nenhuma implementação base.

  • Você não pode se vincular a campos públicos.

  • O tipo da propriedade declarado na sua classe é o tipo que é passado para a associação. No entanto, o tipo usado pela associação depende, em última análise, do tipo da propriedade de destino da associação e não da propriedade da origem da associação. Se houver uma diferença no tipo, talvez você queira escrever um conversor para lidar com como sua propriedade personalizada é inicialmente passada para a associação. Para obter mais informações, consulte IValueConverter.

Objetos inteiros como uma origem de associação

Você pode usar um objeto inteiro como uma origem da associação. Especifique uma origem de associação usando Source o ou DataContext a propriedade e forneça uma declaração de associação em branco: {Binding}. Cenários nos quais isso é útil incluem associação a objetos do tipo cadeia de caracteres, associação a objetos com várias propriedades nas quais você está interessado ou associação a objetos de coleção. Para ver um exemplo de associação a um objeto de coleção inteiro, consulte How to Use the Master-Detail Pattern with Hierarchical Data (.NET Framework).

Talvez seja necessário aplicar a lógica personalizada para que os dados são significativos para sua propriedade de destino vinculada. A lógica personalizada pode estar na forma de um conversor personalizado ou um DataTemplate. Para obter mais informações sobre conversores, consulte Conversão de dados. Para obter mais informações sobre modelos de dados, consulte Visão geral da .NET Framework).

Objetos de coleção como uma origem de associação

Frequentemente, o objeto que você deseja usar como a origem da associação é uma coleção de objetos personalizados. Cada objeto serve como a fonte para uma instância de uma associação repetida. Por exemplo, você pode CustomerOrdersCustomerOrder ter uma coleção que consiste em objetos, em que seu aplicativo itera pela coleção para determinar quantos pedidos existem e os dados contidos em cada ordem.

Você pode enumerar em qualquer coleção que implemente a IEnumerable interface . No entanto, para configurar as vinculações dinâmicas para que inserções ou exclusões na coleção atualizem a interface do usuário automaticamente, a coleção deve implementar a INotifyCollectionChanged interface . Essa interface expõe um evento que deve ser acionado sempre que a coleção subjacente é alterada.

A ObservableCollection<T> classe é uma implementação de uma coleção de dados que expõe a INotifyCollectionChanged interface . Os objetos de dados individuais dentro da coleção devem satisfazer aos requisitos descritos nas seções anteriores. Para ver um exemplo, consulte How to Create and Bind to an ObservableCollection (Como criar e vincular a um .NET Framework). Antes de implementar sua própria coleção, considere ObservableCollection<T> usar ou uma das classes de coleção existentes, List<T>como , Collection<T>e BindingList<T>, entre muitas outras.

Quando você especifica uma coleção como uma origem de associação, o WPF não se vincula diretamente à coleção. Em vez disso, o WPF realmente se vincula à exibição padrão da coleção. Para obter informações sobre exibições padrão, consulte Usando uma exibição padrão.

Se você tiver um cenário avançado e quiser implementar sua própria coleção, considere usar a IList interface . Essa interface fornece uma coleção não genérica de objetos que podem ser acessados individualmente por índice, o que pode melhorar o desempenho.

Requisitos de permissão na associação de dados

Ao .NET Framework, o .NET 5+ (e o .NET Core 3.1) é executado com segurança de confiança total. Todas as vinculações de dados são executados com o mesmo acesso que o usuário que está executando o aplicativo.

Confira também