4

Contoso Cookbookアプリケーション内のグループ化されたアイテムページに少し似たページを作成したいと思います(見たことがある場合)。基本的に、これはCollectionViewSourceにバインドされたGridViewです。

    <CollectionViewSource
        x:Name="groupedItemsViewSource"
        Source="{Binding Groups}"
        IsSourceGrouped="true"
        ItemsPath="TopItems"
        d:Source="{Binding AllGroups, Source={d:DesignInstance Type=data:SampleDataSource, IsDesignTimeCreatable=True}}"/>

GridViewは、Source属性を使用してグループをCVSデータソースの最高レベルにバインドし、次にItemsPath属性を使用して個々のセクションをバインドしているように見えます。

ただし、私のページは、グループが静的であるという点で異なります。時間、カテゴリ、リストです。1つ目はリストビュー、2つ目はタイルのグリッド、3つ目は別のリストビューになります。

また、各グループセクション自体のレイアウトは異なります。グループを繰り返したり、アイテムのレイアウトを繰り返したりするだけではありません。XAMLで直接「静的」グループと各グループのレイアウトを定義し、それらの要素にテストデータを追加できることを期待していましたが、GridViewでは、ダミーのデータソースに対してのみデータバインディングが必要なようです。設計時間。

では、これをどのように行いますか?つまり、基本的に、GridViewとまったく同じ水平スクロールと折り返しが必要ですが、グループのレイアウトはまったく異なり、各グループは理想的にはXAMLで直接定義できる必要がありますか?

スクロールビューアで囲まれた通常のグリッドを作成することを考えています...どう思いますか?あなたならどうしますか?

4

2 に答える 2

2

これはDataTemplateSelectorで実現できます。複数のグループがありますが、各グループ内でアイテムのスタイルが異なります。その他のヘルプ記事については、このSO 投稿を参照してください。

于 2012-09-13T08:15:00.303 に答える
2

GridView では、次のようにグループにGroupStyleを割り当てることができます。

<GridView.GroupStyle>
    <GroupStyle HeaderTemplate="{StaticResource MyGroupHeaderTemplate}" 
                Panel="{StaticResource MyGroupItemsPanelTemplate}" 
                HidesIfEmpty="True" />
</GridView.GroupStyle>

さて、あなたの場合、各グループには独自の GroupStyle が必要です。したがって、GridView の各グループ内で ListView を使用する代わりに、次のことができます。

  1. 使用するヘッダー テンプレートとパネル ( ItemsPanelTemplate(MSDN)) を使用して、2 つの異なるグループ スタイルを定義します。

  2. グループに使用するグループ スタイルを選択するカスタム ロジックを持つクラスを定義します ( GroupStyleSelector ) 。

  3. XAML で GridView に GroupStyleSelector プロパティを設定する

  4. ビュー モデルで静的グループを定義して、必要なデータを含めます: (Times、Categories、List)

于 2012-09-13T02:56:40.367 に答える