カスタムコントロールにコレクションのプロパティを設定して永続化する方法 (複数のコレクション)

 カスタムコントロールで、複数のカスタムコレクションを使用し、その内容を永続化する必要がある場合、このコレクションの内容をサーバコントロールのタグ内に入れ子として登録します。
 これを実現するには、 ParseChildren 属性と PersistenceMode 属性を設定します。
【使い方】

例:プロパティ「Pages」に設定したカスタムコレクション(CustomCollection)を永続化する。
/// <summary>
/// カスタムコントロールクラス。
/// </summary>
[ParseChildren(true),
    ToolboxData("<{0}:TabControl runat=server></{0}:TabControl>")]
public class TabControl : System.Web.UI.WebControls.WebControl
{
    ・・・・・・

    private  myCustomCollection1 = new CustomCollection1();
    private  myCustomCollection2 = new CustomCollection2();

    ・・・・・・

    /// <summary>
    /// カスタムコレクション1を表すオブジェクトを取得します。
    /// </summary>          
    [MergableProperty(false),
        PersistenceMode(PersistenceMode.InnerProperty),
        Description("カスタムコレクション1を表すオブジェクトを取得します。"), Category("データ")] 
    public CustomCollection1 Items1
    {
        get {return myCustomCollection1;}
    }

    /// <summary>
    /// カスタムコレクション2を表すオブジェクトを取得します。
    /// </summary>          
    [MergableProperty(false),
        PersistenceMode(PersistenceMode.InnerProperty),
        Description("カスタムコレクション2を表すオブジェクトを取得します。"), Category("データ")] 
    public CustomCollection2 Items2
    {
        get {return myCustomCollection2;}
    }

    ・・・・・・

}
【補足】
 カスタムコレクションの各プロパティの値は、親のコントロールのタグ内に入れ子として設定されます。また、各プロパティは「DefaultValue()」の設定が可能で、この値と等しい場合は、タグ内に表示されません。
戻る