2012-10-11 65 views
1

我有一個集合,看起來像這樣:綁定擴展和ListView嵌套字典

ObservableDictionary<string, ObservableDictionary<string, SystemStatusItem>> ObservableColoServerStatus 

我創造,我想綁定如下用戶控制工作:

  • 每來自外部字典的鍵(字符串)鍵應該動態地創建一個擴展器。
  • 裏面的擴展器是一個ListView/DataGrid /一些控件用於顯示信息的集合
  • ListView/DataGrid中的每一行或任何將由(字符串)Key和(對象)內部字典的值。

理想情況下,它應該看起來和操作類似於TreeView,但擴展器已經通過我們的UI被廣泛使用,所以我想堅持這一致性。

我是新來WPF和已經做了一些基本數據之前綁定的,但這種嵌套關係的性質正在使這個真的很難環繞

我的頭

回答

1

好吧,首先讓asume你ObservableDictionary是具有Key屬性和Value屬性的項目的集合。你想在WPF利用數據模板做什麼,請參閱該代碼,儘量做到這樣:

<ListBox ItemsSource="{Binding ObservableColoServerStatus}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Expander Header="{Binding Key}"> 
        <ListBox ItemsSource="{Binding Value}"> 
         <ListBox.ItemTemplate> 
          <DataTemplate> 
           <StackPanel Orientation="Horizontal"> 
            <TextBlock Text="{Binding Key}"/> 
            <TextBlock Text="{Binding Value}"/> 
           </StackPanel> 
          </DataTemplate> 
         </ListBox.ItemTemplate> 
        </ListBox> 
       </Expander> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

這是一個列表框,有作爲的ItemsSource你ObservableDictionary,然後在項目模板屬性您設置將用於表示它的所有模板。在這種情況下是一個擴展器,它在標題中有一個列表框,它從第一個字典的值中取出元素,然後再次設置模板。它是相似的。希望它適合你...

+0

這看起來很有前途。我會在今晚測試它,試圖讓它工作,謝謝你的時間。我也在考慮將這個問題分解成幾個不同的類,以便我不必處理嵌套字典。 –