Visão geral de fontes vinculadas (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 discute os tipos de objetos que você pode usar como a fonte de vinculação, como objetos .NET CLR, XML e DependencyObject objetos.

Tipos de origem de vinculação

A associação de dados do Windows Presentation Foundation (WPF) oferece suporte aos seguintes tipos de origem de vinculação:

Implementar uma origem de vinculação em seus objetos

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

Fornecer notificações de alteração

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

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

  1. Implemente a interface INotifyPropertyChanged.

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

  2. Implemente o PropertyChanged padrão.

    Cada propriedade que precisa notificar um destino de vinculação de que foi alterada, tem um evento correspondente PropertyNameChanged , onde PropertyName é 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 qualquer motivo, sua origem de vinculação não fornecer as notificações de alteração de propriedade apropriadas, você poderá usar o UpdateTarget método para atualizar a propriedade de destino explicitamente.

Outras características

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

  • Os objetos de dados que servem como fontes de vinculaçã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 fonte de vinculação da associação.

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

  • Não é possível 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, convém escrever um conversor para lidar com a forma como sua propriedade personalizada é inicialmente passada para a associação. Para obter mais informações, consulte IValueConverter.

Objetos inteiros como uma fonte de vinculação

Você pode usar um objeto inteiro como uma origem da associação. Especifique uma fonte de vinculação usando a Source propriedade ou the DataContext e forneça uma declaração de vinculação em branco: {Binding}. Os cenários nos quais isso é útil incluem vinculação a objetos do tipo string, vinculação a objetos com várias propriedades nas quais você está interessado ou vinculação a objetos de coleção. Para obter um exemplo de associação a um objeto de coleção inteira, consulte Como usar o padrão mestre-detalhe com dados hierárquicos (.NET Framework).

Talvez seja necessário aplicar a lógica personalizada para que os dados sejam significativos à sua propriedade de destino associada. A lógica personalizada pode estar na forma de um conversor personalizado ou um DataTemplatearquivo . 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 de modelagem de dados (.NET Framework).

Objetos de coleção como uma fonte de vinculaçã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 ter uma CustomerOrders coleção que consiste em CustomerOrder objetos, onde seu aplicativo itera sobre a coleção para determinar quantos pedidos existem e os dados contidos em cada ordem.

Você pode enumerar em qualquer coleção que implemente a interface IEnumerable. No entanto, para configurar associaçõ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 interface INotifyCollectionChanged. Essa interface expõe um evento que deve ser acionado sempre que a coleção subjacente é alterada.

A ObservableCollection<T> classe é uma implementação interna 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 obter um exemplo, consulte Como criar e vincular a um ObservableCollection (.NET Framework). Antes de implementar sua própria coleção, considere usar ObservableCollection<T> ou uma das classes de coleção existentes, como List<T>, e BindingList<T>, Collection<T>entre muitas outras.

Quando você especifica uma coleção como uma fonte de vinculaçã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 modos de exibição padrão, consulte Usando um modo de 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 pelo índice, o que pode melhorar o desempenho.

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

Ao contrário do .NET Framework, o .NET é executado com segurança de confiança total. Toda a associação de dados é executada com o mesmo acesso que o usuário que executa o aplicativo.

Confira também