private void UpdateDeep() { Children.Clear(); if(Searchable) { searchTextBox = new System.Windows.Controls.TextBox { Text = ValuePattern }; searchTextBox.TextChanged += SearchTextBox_TextChanged; Children.Add(searchTextBox); } var dictionary = KeyValuePair.GetValue(DataContext) as IDictionary; if (dictionary != null) { string[] unique_types = IDictionaryExtension.CollectUniqueStrings(dictionary, Key); Array.Sort(unique_types, (x, y) => String.Compare(x, y)); foreach (var type in unique_types) { if (type.Contains(ValuePattern)) { var instances = IDictionaryExtension.DeepCollect<IDictionary>(dictionary, new KeyValueFilter { Key = Key, Values = { type } }.Include); if (instances.Count > 0) { var expander = new InstanceExpander { Key = Key, ValuePattern = type, DataContext = instances }; expander.ListBox.SelectionChanged += ListBox_SelectionChanged; Children.Add(expander); } } } } }
private void UpdateShallow() { Children.Clear(); if (Searchable) { searchTextBox = new System.Windows.Controls.TextBox { Text = ValuePattern }; searchTextBox.TextChanged += SearchTextBox_TextChanged; Children.Add(searchTextBox); } var dictionary = KeyValuePair.GetValue(DataContext) as IDictionary; if (dictionary != null) { var unique_types = new List<string>(); foreach(var k in dictionary.Keys) { var d = dictionary[k] as IDictionary; if(d != null) { if(d.Contains(Key)) { var value = d[Key].ToString(); if(!unique_types.Contains(value)) { unique_types.Add(value); } } } } foreach (var type in unique_types) { if (type.Contains(ValuePattern)) { var instances = IDictionaryExtension.Collect<IDictionary>(dictionary, new KeyValueFilter { Key = Key, Values = { type } }.Include); if (instances.Count > 0) { var expander = new InstanceExpander { Key = Key, ValuePattern = type, DataContext = instances }; expander.ListBox.SelectionChanged += ListBox_SelectionChanged; Children.Add(expander); } } } } }