0

私は Windows 8 アプリケーション (C#/XAML) に取り組んでいます。要件の 1 つは、DataGrid に単語のコレクションをロードすることであり、ここではセマンティック ズーム オプションを使用しています。

コレクションに約 1500 を超えるアイテムがある場合、アプリケーションがハングし、次のエラーが発生します。

+Exception {"このコマンドを処理するのに十分なクォータがありません。(HRESULT からの例外: 0x80070718)"} System.Exception

使用されるコードの一部:

_collection = _readDictionary.GetModeDetailsForModeDetails(modeId);

var query = from item in _collection
            orderby (item.WordName.ToLower())
            group item by item.WordName[0].ToString().ToUpper() into g
            select new { GroupName = g.Key.ToString().ToUpper(), Items = g };

foreach (var g in query)
{
  GroupInfoList<Words> info = new GroupInfoList<Words>();
  info.Key = g.GroupName;

  foreach (var item in g.Items)
  {
    info.Add(item);
  }

  groups.Add(info);
}

bindGroupData.Source = groups;
(semanticZoom.ZoomedOutView as ListViewBase).ItemsSource = bindGroupData.View.CollectionGroups;

これは XAML コードです。

 <SemanticZoom  x:Name="semanticZoom" VerticalAlignment="Bottom" >
        <SemanticZoom.ZoomedOutView>
            <GridView ScrollViewer.IsHorizontalScrollChainingEnabled="False" VerticalAlignment="Top" HorizontalAlignment="Left">
                <GridView.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Group.Key}" FontFamily="Segoe UI Light" Foreground="Red" FontSize="24"/>
                    </DataTemplate>
                </GridView.ItemTemplate>
                <GridView.ItemsPanel>
                    <ItemsPanelTemplate>
                        <WrapGrid ItemWidth="75" ItemHeight="75" MaximumRowsOrColumns="5" VerticalChildrenAlignment="Center" />
                    </ItemsPanelTemplate>
                </GridView.ItemsPanel>
                <GridView.ItemContainerStyle>
                    <Style TargetType="GridViewItem">
                        <Setter Property="Margin" Value="4" />
                        <Setter Property="Padding" Value="10" />
                        <Setter Property="BorderBrush" Value="Gray" />
                        <Setter Property="BorderThickness" Value="2" />
                        <Setter Property="HorizontalContentAlignment" Value="Center" />
                        <Setter Property="VerticalContentAlignment" Value="Center" />
                    </Style>
                </GridView.ItemContainerStyle>
            </GridView>
            </SemanticZoom.ZoomedOutView>
        <SemanticZoom.ZoomedInView>
            <GridView x:Name="GrdViewWord" SelectionMode="Multiple" ItemsSource="{Binding Source={StaticResource bindGroupData}}"  ItemClick="GrdViewWord_ItemClick" SelectionChanged="GrdViewWord_SelectionChanged" Background="#FFE2E2E2" Height="396" VerticalAlignment="Top" >
                <!-- ItemContainerStyle="{StaticResource GridViewItemStyle}"   -->
                <GridView.ItemsPanel>
                    <ItemsPanelTemplate>
                        <!--<WrapGrid Orientation="Vertical"  Background="{Binding BG}"/>-->
                        <StackPanel Orientation="Horizontal" />
                    </ItemsPanelTemplate>
                </GridView.ItemsPanel>

                <GridView.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal" Height="20" Width="75"  >
                            <TextBlock Text="{Binding WordName}" Tag="{Binding WordID}" FontFamily="Segoe UI" FontSize="12" Margin="5,5,0,0" Foreground="Black" HorizontalAlignment="Left" Height="20" Padding="0"/>
                        </StackPanel>
                    </DataTemplate>
                </GridView.ItemTemplate>

                <GridView.GroupStyle>
                    <GroupStyle>
                        <GroupStyle.HeaderTemplate>
                            <DataTemplate>
                                <Grid Margin="10">
                                    <!--Background="{StaticResource ApplicationPageBackgroundThemeBrush}"-->
                                    <TextBlock Text='{Binding Key}'  FontSize="25" Foreground="Red" Margin="5" />
                                </Grid>
                            </DataTemplate>
                        </GroupStyle.HeaderTemplate>

                        <GroupStyle.Panel>
                            <ItemsPanelTemplate>
                                <VariableSizedWrapGrid Orientation="Vertical" Height="300" />
                            </ItemsPanelTemplate>
                        </GroupStyle.Panel>
                    </GroupStyle>
                </GridView.GroupStyle>
            </GridView>
        </SemanticZoom.ZoomedInView>
    </SemanticZoom>

誰でもこの問題について私を助けてもらえますか?

4

3 に答える 3

0

これはセマンティック ズームの大きな問題のようです。約 1200 アイテムを超えるものは機能しません。

上記の「リストまたはグリッドでの仮想化の使用」のリンクでは、「グループ化されたデータ - UI の仮想化はグループ化されたデータではサポートされていません」と表示されています。

セマンティック ズームはグループ化されたデータを使用するため、機能しません。

Microsoft 独自のセマンティックな例でさえ、1200 項目以上のモアレでクラッシュします。

このリンクは役に立つかもしれません:

http://social.msdn.microsoft.com/Forums/windowsapps/en-US/680136e1-67de-4111-824a-fa9f530ffc10/binding-largesets-of-data-to-gridview-is-causing-a-problem

于 2013-09-04T08:08:40.070 に答える
0

仮想化を使用する必要があります。GridView は簡単に仮想化できます (UI 仮想化またはデータ仮想化)。必要な仮想化の種類については、 Microsoft のドキュメントを参照してください。

于 2013-05-29T13:37:04.740 に答える