0

Silverlight でコレクションをアコーディオン コントロールにバインドする方法はありますが、アコーディオン項目の 1 つをコレクションに共通の項目のリストにする方法はありますか。たとえば、いくつかのタイプがあります: Client、PlanCollection、Plan、AllocationCollection、Allocation。各クライアントには 1 つ以上のプランがあり、各プランには 1 つ以上の割り当てがあります。一部の割り当ては、すべてのプランに共通です。共通の割り当て自体は、クライアントのプラン コレクションの割り当てコレクション プロパティに含まれています。これは明確にするためのサンプルコードです。

クライアントはこのように作成されます

Client c = new Client() { Name = "Acme Company" };

プランの割り当てには、次のようにアクセスします

c.Plans["Acme DB Plan"].Allocations

単一の割り当ては、次のようにアクセスされます

Allocation first = c.Plans["Acme DB Plan"].Allocations[0];

計画に共通の割り当てには、次のようにアクセスします

c.Plans.CommonAllocations;

そして、このような単一の共通の割り当て

Allocation firstCommon = c.Plans.CommonAllocations[0];

アコーディオンの各ヘッダーは計画名になり、各ヘッダーが展開されて計画の割り当てが表示されます。また、展開してすべてのプランに共通の割り当てを表示する「Common Allocations」という別のヘッダーも必要です。私はこれを行う方法を理解できないようです。プランをアコーディオンの ItemsSource プロパティに正しくバインドできますが、プランがバインドされるとアコーディオンのアイテム コレクションが読み取り専用になるため、共通の割り当てを別のアイテムとして追加することはできません。また、共通の割り当ては実際にはクライアントの計画を表していないため、共通の割り当て用に別のタイプの計画を作成したくありません。どんな助けでも大歓迎です。

4

1 に答える 1

0

アコーディオンの ItemsSource の割り当てのコレクションを作成するのはどうですか。

次のようにコレクションを作成します。

IEnumerable<Allocation> GetAllAllocations(Client c)
{
    foreach (var plan in c.Plans)
    {
        yield return plan.Allocations;
    }

    yield return c.Plans.CommonAllocations;
}

必要に応じて、バインディングのプロパティとして公開します。

public IEnumerable<Allocation> AllAllocations
{
    get
    {
        return GetAllAllocations(new Client() { Name = "Acme Company" });
    }
}
于 2013-03-06T22:15:36.033 に答える