Novidades do WPF versão 4.5

Este tópico contém informações sobre recursos novos e aprimorados no Windows Presentation Foundation (WPF) versão 4.5.

Este tópico contém as seguintes seções:

Controle de faixa de opções

O WPF 4.5 é fornecido com um controle que hospeda uma Barra de Ferramentas de Acesso Rápido, um Ribbon Menu de Aplicativo e guias. Para obter mais informações, consulte a visão geral da faixa de opções.

Desempenho aprimorado ao exibir grandes conjuntos de dados agrupados

Virtualização de interface do usuário ocorre quando um subconjunto de elementos da interface do usuário (IU) gerados de um grande número de itens de dados com base em quais itens estão visíveis na tela. O VirtualizingPanel define a propriedade anexada que habilita a IsVirtualizingWhenGrouping virtualização da interface do usuário para dados agrupados. Para obter mais informações sobre o agrupamento de dados, consulte como: Classificar e Agrupar dados usando um modo de exibição em XAML. Para obter mais informações sobre como virtualizar dados agrupados, consulte a IsVirtualizingWhenGrouping propriedade anexada.

Novos recursos para o VirtualizingPanel

  1. Você pode especificar se um VirtualizingPanel, como o VirtualizingStackPanel, exibe itens parciais usando a ScrollUnit propriedade anexada. Se ScrollUnit estiver definido como Item, o VirtualizingPanel exibirá apenas os itens que estiverem completamente visíveis. Se ScrollUnit estiver definido como Pixel, o VirtualizingPanel pode exibir itens parcialmente visíveis.

  2. Você pode especificar o tamanho do cache antes e depois do visor quando o VirtualizingPanel estiver sendo virtualizado usando a CacheLength propriedade anexada. O cache é a quantidade de espaço acima ou abaixo do visor no qual itens não serão virtualizados. Usando um cache para evitar a geração de elementos de interface do usuário conforme eles estão colocados na exibição pode melhorar o desempenho. O cache é preenchido com uma prioridade mais baixa para que o aplicativo não estão mais respondendo durante a operação. A VirtualizingPanel.CacheLengthUnit propriedade determina a unidade de medida usada pelo VirtualizingPanel.CacheLength.

Associando a propriedades estáticas

Você pode usar propriedades estáticas como a origem de vinculação de dados. O mecanismo de vinculação de dados reconhece quando o valor da propriedade muda se um evento estático será gerado. Por exemplo, se a classe SomeClass define uma propriedade estática chamada MyProperty, SomeClass pode definir um evento estático que é gerado quando o valor de MyProperty alterações. O evento estático pode usar qualquer uma das seguintes assinaturas.

  • public static event EventHandler MyPropertyChanged;

  • public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;

Observe que, no primeiro caso, a classe expõe um evento estático chamado PropertyNameChanged que passa EventArgs para o manipulador de eventos. No segundo caso, a classe expõe um evento estático chamado StaticPropertyChanged que passa PropertyChangedEventArgs para o manipulador de eventos. Uma classe que implementa a propriedade estática pode optar por gerar notificações de alteração de propriedade usando um método.

Acesso a coleções em Threads que não sejam de interface do usuário

WPF permite acessar e modificar as coleções em threads diferente daquele que criou a coleção de dados. Isso permite que você use um thread em segundo plano para receber dados de uma fonte externa, como um banco de dados e exibir os dados no thread da interface do usuário. Usando outro thread para modificar a coleção, a interface do usuário continua a responder à interação do usuário.

Validação de dados de forma síncrona e assíncrona

A INotifyDataErrorInfo interface permite que as classes de entidade de dados implementem regras de validação personalizadas e exponham os resultados da validação de forma assíncrona. Essa interface também dá suporte a objetos de erro personalizados, vários erros por propriedade, erros de propriedades cruzadas e erros de nível de entidade. Para obter mais informações, consulte INotifyDataErrorInfo.

Atualizar automaticamente a fonte de vinculação de dados

Se você usar uma associação de dados para atualizar uma fonte de dados, poderá usar a propriedade para especificar um período de tempo a Delay ser passado após as alterações de propriedade no destino antes das atualizações de origem. Por exemplo, suponha que você tenha um que tenha seus Value dados de propriedade bidirecionais vinculados a uma propriedade de um Slider objeto de dados e a UpdateSourceTrigger propriedade esteja definida como PropertyChanged. Neste exemplo, quando o usuário move o Slider, a origem é atualizada para cada pixel que ele Slider move. O objeto de origem normalmente precisa do valor do controle deslizante somente quando o controle deslizante Value para de mudar. Para evitar a atualização da fonte com muita frequência, use Delay para especificar que a fonte não deve ser atualizada até que um certo período de tempo decorra depois que o polegar parar de se mover.

Associando a tipos que implementam ICustomTypeProvider

O WPF oferece suporte à vinculação de dados a objetos que implementam ICustomTypeProvidero , também conhecidos como tipos personalizados. Você pode usar tipos personalizados nos seguintes casos.

  1. Como um PropertyPath em uma associação de dados. Por exemplo, a propriedade de um pode fazer referência a Path uma propriedade de um Binding tipo personalizado.

  2. Conforme o valor do DataType imóvel.

  3. Como um tipo que determina as colunas geradas automaticamente em um DataGridarquivo .

Recuperando informações de vinculação de dados de uma expressão de associação

Em certos casos, você pode obter o BindingExpression de um Binding e precisar de informações sobre os objetos de origem e de destino da associação. Novas APIs foram adicionadas para que você possa obter o código-fonte ou objeto de destino ou a propriedade associada. Quando você tiver um BindingExpression, use as seguintes APIs para obter informações sobre o destino e a origem.

Para encontrar esse valor da associação Use essa API
O objeto de destino BindingExpressionBase.Target
Propriedade de destino BindingExpressionBase.TargetProperty
Objeto de origem BindingExpression.ResolvedSource
Propriedade de origem BindingExpression.ResolvedSourcePropertyName
Se o BindingExpression pertence a um BindingGroup BindingExpressionBase.BindingGroup
O proprietário de um BindingGroup Owner

Verificando um objeto DataContext válido

Há casos em que o DataContext de um contêiner de item em um ItemsControl torna-se desconectado. Um contêiner de item é o elemento da interface do usuário que exibe um item em um ItemsControlarquivo . Quando um é dados vinculados a uma coleção, um ItemsControl contêiner de item é gerado para cada item. Em alguns casos, os contêineres de itens são removidos da árvore visual. Dois casos típicos em que um contêiner de item é removido são quando um item é removido da coleção subjacente e quando a ItemsControlvirtualização é habilitada no . Nesses casos, a DataContext propriedade do contêiner de item será definida como o objeto sentinela retornado pela BindingOperations.DisconnectedSource propriedade estática. Você deve verificar se o é igual ao DisconnectedSource objeto antes de acessar o DataContextDataContext de um contêiner de item.

Reposicionamento de dados à medida que os valores mudam (shaping dinâmico)

Uma coleção de dados pode ser agrupada, classificada ou filtrada. WPF 4.5 permite que os dados sejam reorganizados quando os dados são modificados. Por exemplo, suponha que um aplicativo use um para listar ações em um DataGrid mercado de ações e as ações sejam classificadas por valor de ações. Se a classificação ao vivo estiver habilitada nas ações CollectionView, a DataGrid posição de uma ação nos movimentos quando o valor da ação se torna maior ou menor do que o valor de outra ação. Para obter mais informações, consulte a ICollectionViewLiveShaping interface.

Suporte aprimorado para estabelecer uma referência fraca em um evento

Implementar o padrão de evento fraco agora é mais fácil porque os assinantes de eventos podem participar dele sem implementar uma interface adicional. A classe genérica WeakEventManager também permite que os assinantes participem do padrão de evento fraco se um dedicado WeakEventManager não existir para um determinado evento. Para obter mais informações, consulte Padrões de evento fraco.

Novos métodos para a classe Dispatcher

A classe Dispatcher define novos métodos para operações síncronas e assíncronas. O método síncrono Invoke define sobrecargas que usam um Action parâmetro ou Func<TResult> . O novo método assíncrono, , InvokeAsynctambém usa um ou como o parâmetro de retorno de chamada e retorna um ActionDispatcherOperation ou Func<TResult>DispatcherOperation<TResult>. As DispatcherOperation classes e DispatcherOperation<TResult> definem uma Task propriedade. Ao chamar InvokeAsynco , você pode usar a await palavra-chave com o ou o TaskDispatcherOperation associado . Se você precisar aguardar de forma síncrona o Task que é retornado por um DispatcherOperation ou , chame DispatcherOperation<TResult>o método de DispatcherOperationWait extensão. A chamada resultará em um deadlock se a operação estiver na fila em um thread de chamada Task.Wait . Para obter mais informações sobre como usar um para executar operações assíncronas, consulte Paralelismo de tarefas (Biblioteca paralela Task de tarefas).

Extensões de marcação para eventos

WPF 4.5 dá suporte a extensões de marcação de eventos. Embora o WPF não define uma extensão de marcação a ser usado para eventos, terceiros são capazes de criar uma extensão de marcação que pode ser usada com eventos.

Confira também