我需要用我有的詞典列表填寫一個TreeView。C#WPF - 與詞典的TreeView綁定
凡字典有標題和孩子鍵
[{"title":"foo", "children":[]},]
但是我無法找出具有約束力。這是完全錯誤的。我顯然需要顯示dict [「title」]並使用dict [「children」]作爲孩子。
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Value}">
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
<TextBlock Text="{Binding Key}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
哈所以顯然綁定支持[]語法,因此這類作品:
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=[children]}">
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=[title]}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
<TextBlock Text="{Binding Path=[title]}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
每個字典可以有孩子嵌套但是他們想然而許多層面。這是可以處理的嗎?通過上面的模板和下面的代碼,不會顯示盛大的孩子。
string s = @"[{""title"":""Title1"",""children"":[{""title"":""Child1"",""children"":[{""title"":""grandchild1"",""children"":[]}]}]}]";
List<Dictionary<string, object>> marr = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(s);
mTreeView.ItemsSource = marr;
通過在綁定使用[]的方式被稱爲索引,我從文檔發現了它在此鏈接:
http://msdn.microsoft.com/en-us/library/ms752300.aspx#Path_Syntax
你需要一個轉換器,它可以通過一個特定的鍵從字典中獲取/設置值。有了這樣一個轉換器,你可以按照以下方式進行綁定:'{Binding Converter = {StaticResource GetFromDictionaryConverter},ConverterParameter = children}'或'{Binding Converter = {StaticResource GetFromDictionaryConverter},ConverterParameter = title}',假設轉換器已被添加爲具有關鍵字'GetFromDictionaryConverter'的資源並且它使用轉換器參數作爲關鍵字並且假定綁定源是'Dictionary'。 –