public static TreeViewItem KlAkView(string Caption, object Item) { var result = new TreeViewItem() { Header = Caption }; if (Item == null) { result.Items.Add(new TreeViewItem() { Header = "Нет данных" }); } else if (Item is KlAkParams Params) { foreach (string Name in Params) { var Value = Params.get_Item(Name); if (Marshal.IsComObject(Value)) { result.Items.Add(KlAkView(Name, Value)); } else { result.Items.Add(new TreeViewItem() { Header = Name + ": " + Value.ToString() }); } } } else if (Item is KlAkCollection Coll) { for (int i = 0; i < Coll.Count; i++) { object Value = Coll.get_Item(i); if (Marshal.IsComObject(Value)) { result.Items.Add(KlAkView(i.ToString(), Value)); } else { result.Items.Add(new TreeViewItem() { Header = i.ToString() + ": " + Value.ToString() }); } } } else if (Item is IKlAkSettingsStorage Settings) { var Storages = Settings.Enum(); for (int i = 0; i < Storages.Count; i++) { KlAkParams Storage = Storages.get_Item(i); var Data = Settings.Read(Storage.get_Item("PRODUCT"), Storage.get_Item("VERSION"), Storage.get_Item("SECTION")); result.Items.Add(FetchInfo.KlAkView(Storage.get_Item("PRODUCT") + "/" + Storage.get_Item("VERSION") + "/" + Storage.get_Item("SECTION"), Data)); } } else { throw new NotImplementedException("Визуализация типа " + Item.GetType().ToString() + " не реализована."); } return(result); }