---
title: "レンダリングバリアントにおけるModelReferenceフィールドレンダラーの使用"
slug: "using-the-modelreference-field-renderer-in-rendering-variants"
abstract: "ModelReferenceフィールドレンダラーは、レンダリングバリアントを使ってネストされたオブジェクト(例えばプロダクトバンドル)を持つモデルを参照する機能を提供します。"
---
# レンダリングバリアントにおけるModelReferenceフィールドレンダラーの使用

SXAにはデフォルトのレンダリングおよび [レンダリングバリエー](https://doc.sitecore.com/xp/en/developers/sxa/100/sitecore-experience-accelerator/en/create-a-rendering-variant.html) ション( ReferenceやModelフィールドレンダラーを含む)が付属しています。しかし、タイプコレクションのモデルプロパティを処理するには、ModelReferenceフィールドレンダラーを使用する必要があります。

ModelReferenceフィールドレンダラーはレンダリングモデル内の指定されたコレクションを反復処理し、追加のモデルフィールドレンダラーをサブアイテムとして使用してデータを抽出できます。コレクションはアイテムの**パススルーフィールド**フィールドで指定します。対象となるモデルコレクションプロパティはIEnumerableインターフェースを実装しなければなりません。

![Rendering variant structure diagram.](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/101/sitecore-experience-commerce/images/ModelReference.png)

標準フィールドレンダラーは、任意の標準フィールドレンダラーを、ModelReferenceフィールドレンダラーの下にネスト方式で使用できます。また、ModelReferenceフィールドレンダラーをネストして、複数のネストされたオブジェクト(階層構造)を持つモデルのコレクションプロパティをターゲットにすることも可能です。これはProduct Bundle - Deprecatedの以下の図に示されています。

![ModelReferenceContentTree94.png](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/101/sitecore-experience-commerce/images/ModelReferenceContentTree94.png)

以下のクラス図は、ModelReferenceフィールドレンダラーの使い方の例を示しています。図内には、ModelReferenceレンダラーがプロダクトバンドルコンポーネントのデフォルトレンダリングバリアントを反復するために使われる4つのネストされたコレクションがあります。

-   ProductBundleRenderingModelはLineItemsコレクションを繰り返します。
-   ProductVariantクラスはVariantSelectionsコレクションを反復します。
-   BundleVariantsReferenceはValidProductVariantsコレクションを繰り返します。
-   OptionsクラスはOptionsコレクションを反復します。
-   BundleValueVariantsReferenceはVariantsコレクションを繰り返します。

![Diagram of the Product Bundle Rendering Model](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/101/sitecore-experience-commerce/images/ProductBundleModel.png)

Scribanテンプレートを修正することで [製品バンドルをカスタマイズ](https://doc.sitecore.com/xp/ja/developers/101/sitecore-experience-commerce/customizing-the-product-bundle-rendering.html "Customizing the Product Bundle rendering") できます。

ModelReferenceレンダラーを使用するには、コレクションプロパティを持つレンダリングモデルクラスを作成する必要があります。モデルクラスはVariantsRenderingModelから継承しなければなりません。

using Sitecore.XA.Foundation.Variants.Abstractions.Models;
namespace ProductList.Models
{
 public class ProductListRenderingModel: VariantsRenderingModel
 {
 public ICollection<Product> Products { get; set; }
 }
}

## 構成

Sitecore.Commerce.XA.Foundation.Common.config設定ファイルにModelReferenceフィールドレンダラーを登録するには、以下のコードスニペットを使用します。

<sitecore>
 <services>
 <register serviceType="Sitecore.Commerce.XA.Foundation.Common.RenderingVariants.Services.ICollectionPropertyExtractor, Sitecore.Commerce.XA.Foundation.Common" implementationType="Sitecore.Commerce.XA.Foundation.Common.RenderingVariants.Services.CollectionPropertyExtractor, Sitecore.Commerce.XA.Foundation.Common" lifetime="Singleton"/>
 </services>

<parseVariantFields>
 <processor type="Sitecore.Commerce.XA.Foundation.Common.RenderingVariants.ParseVariantFields.ParseModelReference, Sitecore.Commerce.XA.Foundation.Common" resolve="true" />
</parseVariantFields>

<renderVariantField>
 <processor type="Sitecore.Commerce.XA.Foundation.Common.Pipelines.RenderVariantField.RenderModelReference, Sitecore.Commerce.XA.Foundation.Common" resolve="true" />
</renderVariantField>
</sitecore>