0

テンプレート セレクターで GridView を使用し、コード ビハインドで項目ソースを渡しています。これに関する問題は、VariableSizedWrapGrid が非常に遅く、渡されるコレクションが約 80 個のアイテム (コレクションはいくつかの文字列で構成されている) であることです。variableSizedWrapGrid を削除すると問題は解決しますが、幅が狭いテンプレート間に大きなギャップが残ります。

ここにGridViewがあります:

    <SemanticZoom x:Name="Zoom" Grid.Row="1" IsZoomedInViewActive="False" ViewChangeStarted="Zoom_ViewChangeStarted_1" IsZoomOutButtonEnabled="False" Margin="0,0,0,29" Grid.RowSpan="2">
        <SemanticZoom.ZoomedInView>
            <!-- Horizontal scrolling grid used in most view states -->
            <GridView
        x:Name="itemGridView"
        AutomationProperties.AutomationId="ItemsGridView"
        AutomationProperties.Name="Items"
        TabIndex="1"
        ItemTemplateSelector="{StaticResource DayTemplateSelector}"
        SelectionMode="None"
        IsSwipeEnabled="True"
        ItemContainerStyle="{StaticResource GridViewItemStyle1}"
        ScrollViewer.HorizontalScrollBarVisibility="Auto"
        IsItemClickEnabled="True"
        ScrollViewer.IsHorizontalScrollChainingEnabled="False"
        ItemClick="ItemView_ItemClick">
                <GridView.ItemsPanel>
                    <ItemsPanelTemplate>
                        <VariableSizedWrapGrid ItemWidth="380" ItemHeight="500"/>
                    </ItemsPanelTemplate>
                </GridView.ItemsPanel>
            </GridView>
        </SemanticZoom.ZoomedInView>

そしてテンプレートセレクター:

     class DayTemplateSelecter : DataTemplateSelector
{
    public DataTemplate DayOffTemplate { get; set; }

    public DataTemplate DutyTemplate { get; set; }

    public DataTemplate RestTemplate { get; set; }

    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
    {
        var templateItem = item as DutyItem;
        var element = container as FrameworkElement;


        if (templateItem.Trip.Count > 0 || templateItem.OtherTrip.Count > 0)
        {
            container.SetValue(VariableSizedWrapGrid.ColumnSpanProperty, 2);
                return DutyTemplate;
        }
        else if (templateItem.Codes.Count > 0)
        {
                container.SetValue(VariableSizedWrapGrid.ColumnSpanProperty, 1);
                return DayOffTemplate;

        }
        else
        {
            container.SetValue(VariableSizedWrapGrid.ColumnSpanProperty, 1);
            return RestTemplate;
        }

    }

}

これがそれほど大きなパフォーマンスの違いをもたらすとは思いませんでした.variableSized を使用するだけで、ページに 3 秒の遅延が発生し、これは一部のローエンド タブレットではさらに大きくなります。

私はそれを間違っていますか、これを行うより良い方法はありますか?

4

1 に答える 1

1

VariableSizedWrapGrid は、WrapGrid とは異なり、アイテムを仮想化しません。80 個のアイテムを表示する必要がある場合は、WrapGrid を使用するか、VariableSizedWrapGrid を使用する必要がある場合は、アイテムの量をより管理しやすいレベルに減らすことをお勧めします。

于 2013-03-17T06:05:19.530 に答える