Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Use x:Phase com a extensão de marcação {x:Bind} para renderizar os itens ListView e GridView de forma incremental e melhorar a experiência de rolagem. X:Phase fornece uma maneira declarativa de obter o mesmo efeito que usar o evento ContainerContentChanging para controlar manualmente a renderização de itens de lista. Veja também Atualize os itens do ListView e GridView de forma incremental.
Uso do atributo XAML
<object x:Phase="PhaseValue".../>
Valores XAML
| Prazo | Description |
|---|---|
| PhaseValue | Um número que indica a fase em que o elemento será processado. O padrão é 0. |
Observações
Se uma lista for rolada rapidamente com toque ou usando a roda do mouse, dependendo da complexidade do template de dados, a lista poderá não ser capaz de renderizar itens rápido o suficiente para acompanhar a velocidade de rolagem. Isso é particularmente verdadeiro para um dispositivo portátil com uma CPU eficiente, como um tablet.
O Phasing permite a renderização incremental do modelo de dados para que o conteúdo possa ser priorizado e os elementos mais importantes sejam renderizados primeiro. Isso permite que a lista mostre conteúdo para cada item se estiver rolando rapidamente e renderizará mais elementos de cada modelo de template conforme o tempo permitir.
Example
<DataTemplate x:Key="PhasedFileTemplate" x:DataType="model:FileItem">
<Grid Width="200" Height="80">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="75" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Image Grid.RowSpan="4" Source="{x:Bind ImageData}" MaxWidth="70" MaxHeight="70" x:Phase="3"/>
<TextBlock Text="{x:Bind DisplayName}" Grid.Column="1" FontSize="12"/>
<TextBlock Text="{x:Bind prettyDate}" Grid.Column="1" Grid.Row="1" FontSize="12" x:Phase="1"/>
<TextBlock Text="{x:Bind prettyFileSize}" Grid.Column="1" Grid.Row="2" FontSize="12" x:Phase="2"/>
<TextBlock Text="{x:Bind prettyImageSize}" Grid.Column="1" Grid.Row="3" FontSize="12" x:Phase="2"/>
</Grid>
</DataTemplate>
O modelo de dados descreve 4 fases:
- Apresenta o bloco de texto DisplayName. Todos os controles sem uma fase especificada serão implicitamente considerados como parte da fase 0.
- Mostra o bloco de texto prettyDate.
- Mostra os blocos de texto prettyFileSize e prettyImageSize.
- Mostra a imagem.
O Phasing é um recurso de {x:Bind} que funciona com controles derivados de ListViewBase e que processa incrementalmente o modelo de item para associação de dados. Ao renderizar itens de lista, o ListViewBase renderiza uma única fase para todos os itens no modo de exibição antes de passar para a próxima fase. O trabalho de renderização é executado em lotes divididos por tempo para que, conforme a lista é rolada, o trabalho necessário possa ser reavaliado e não executado para itens que já não estão visíveis.
O atributo x:Phase pode ser especificado em qualquer elemento em um modelo de dados que usa {x:Bind}. Quando um elemento tiver uma fase diferente de 0, o elemento ficará oculto do modo de exibição (via Opacidade, não visibilidade) até que essa fase seja processada e as associações sejam atualizadas. Quando um controle derivado de ListViewBase é rolado, ele reutiliza os modelos de item dos itens que não estão mais visíveis na tela para renderizar os novos itens visíveis. Os elementos de interface do usuário dentro do modelo manterão seus valores antigos até que eles sejam associados novamente aos dados. O faseamento faz com que a etapa de associação de dados seja atrasada e, assim, o faseamento precisa ocultar os elementos da interface do usuário caso eles estejam obsoletos.
Cada elemento de interface do usuário pode ter apenas uma fase especificada. Nesse caso, isso se aplicará a todas as associações no elemento. Se uma fase não for especificada, a fase 0 será assumida.
Os números de fase não precisam ser contíguos e são iguais ao valor de ContainerContentChangingEventArgs.Phase. O evento ContainerContentChanging será gerado para cada fase antes que as associações x:Phase sejam processadas.
O faseamento afeta apenas as associações {x:Bind}, não as associações {Binding}.
O faseamento será aplicado somente quando o modelo de item for renderizado usando um controle que esteja consciente do faseamento. Para o Windows 10, isso significa ListView e GridView. O faseamento não se aplicará aos modelos de dados usados em outros controles de item ou em outros cenários, como as seções ContentTemplate ou Hub; nesses casos, todos os elementos da interface do usuário serão associados aos dados de uma só vez.
Windows developer