x:Phase 특성
{x:Bind} 태그 확장과 함께 x:Phase를 사용하여 ListView 및 GridView항목을 증분 방식으로 렌더링 하고 이동 환경을 개선합니다. x:Phase 는 ContainerContentChanging 이벤트를 사용하여 목록 항목의 렌더링을 수동으로 제어하는 것과 동일한 효과를 달성하는 선언적 방법을 제공합니다. 또한 ListView 및 GridView 항목 업데이트도 증분 방식으로 참조 하세요.
XAML 특성 사용
<object x:Phase="PhaseValue".../>
XAML 값
용어 | 설명 |
---|---|
PhaseValue | 요소가 처리되는 단계를 나타내는 숫자입니다. 기본값은 0입니다. |
설명
목록이 터치로 빠르게 이동되거나 마우스 휠을 사용하는 경우 데이터 템플릿의 복잡성에 따라 목록이 스크롤 속도를 따라잡을 만큼 빠르게 항목을 렌더링하지 못할 수 있습니다. 태블릿과 같은 전원 효율적인 CPU를 사용하는 휴대용 디바이스에서 특히 그렇습니다.
단계화를 사용하면 콘텐츠의 우선 순위를 지정하고 가장 중요한 요소를 먼저 렌더링할 수 있도록 데이터 템플릿을 증분 렌더링할 수 있습니다. 이렇게 하면 빠르게 이동하면 목록에서 각 항목에 대한 일부 콘텐츠를 표시할 수 있으며 시간이 지남에 따라 각 템플릿의 더 많은 요소를 렌더링합니다.
예시
<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>
데이터 템플릿은 다음 4단계를 설명합니다.
- DisplayName 텍스트 블록을 표시합니다. 단계가 지정되지 않은 모든 컨트롤은 암시적으로 0단계의 일부로 간주됩니다.
- prettyDate 텍스트 블록을 표시합니다.
- prettyFileSize 및 prettyImageSize 텍스트 블록을 보여 줍니다.
- 이미지를 표시합니다.
단계화는 ListViewBase에서 파생된 컨트롤과 함께 작동하고 데이터 바인딩을 위해 항목 템플릿을 증분 방식으로 처리하는 {x:Bind}의 기능입니다. 목록 항목을 렌더링할 때 ListViewBase 는 다음 단계로 이동하기 전에 보기의 모든 항목에 대해 단일 단계를 렌더링합니다. 렌더링 작업은 목록을 스크롤할 때 필요한 작업을 다시 평가할 수 있고 더 이상 표시되지 않는 항목에 대해 수행되지 않도록 시간 조각화된 일괄 처리로 수행됩니다.
{x:Bind}를 사용하는 데이터 템플릿의 모든 요소에 x:Phase 특성을 지정할 수 있습니다. 요소에 0이 아닌 단계가 있는 경우 해당 단계가 처리되고 바인딩이 업데이트될 때까지 요소가 보기에서 숨겨집니다(표시 유형이 아닌 Visibility를 통해). ListViewBase 파생 컨트롤이 스크롤되면 더 이상 화면에 표시되지 않는 항목에서 항목 템플릿을 재활용하여 새로 표시되는 항목을 렌더링합니다. 템플릿 내의 UI 요소는 데이터가 다시 바인딩될 때까지 이전 값을 유지합니다. 단계적으로 실행하면 데이터 바인딩 단계가 지연되므로 부실한 경우 UI 요소를 숨겨야 합니다.
각 UI 요소에는 지정된 단계가 하나만 있을 수 있습니다. 이 경우 요소의 모든 바인딩에 적용됩니다. 단계를 지정하지 않으면 0단계가 가정됩니다.
단계 번호는 연속될 필요가 없으며 ContainerContentChangingEventArgs.Phase의 값과 동일합니다. x:Phase 바인딩이 처리되기 전에 각 단계에 대해 ContainerContentChanging 이벤트가 발생합니다.
단계화는 {Binding} 바인딩이 아닌 {x:Bind} 바인딩에만 영향을 줍니다.
단계화는 단계적 인식 컨트롤을 사용하여 항목 템플릿이 렌더링되는 경우에만 적용됩니다. Windows 10의 경우 ListView 및 GridView를 의미합니다. 다른 항목 컨트롤에 사용되는 데이터 템플릿이나 ContentTemplate 또는 Hub 섹션과 같은 다른 시나리오에서는 단계가 적용되지 않습니다. 이러한 경우 모든 UI 요소는 한 번에 데이터가 바인딩됩니다.