2013-03-06 91 views
0

有沒有辦法將集合綁定到Silverlight中的Accordion控件,但是其中一個Accordion項目是該集合通用的項目列表。例如,我有幾種類型:Client,PlanCollection,Plan,AllocationCollection,Allocation。每個客戶都有一個或多個計劃,每個計劃都有一個或多個分配。一些分配對所有計劃都是共同的。公共分配本身包含在客戶計劃集合的分配集合屬性中。這裏有一些示例代碼來克萊利。在Silverlight中自定義綁定到手風琴控件

客戶端是這樣

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]; 

在手風琴每個頭一個共同的分配將是一個計劃名稱和每個頭將擴大,以揭示該計劃的撥款。我還需要一個名爲「通用分配」的單獨標題,該標題可擴展以顯示所有計劃共有的分配。我似乎無法想出辦法做到這一點。我可以將計劃正確地綁定到Accordion的ItemsSource屬性,但我無法將常用分配作爲單獨的項目添加,因爲一旦計劃被綁定,Accordion的項目集合就變爲只讀。我也不想爲公共分配創建單獨的計劃類型,因爲公共分配實際上並不代表客戶的計劃。任何幫助,將不勝感激。

回答

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" }); 
    } 
}