public Control HandleList(string name, object value) { Debug.WriteLine("List Found! Type: " + value.GetType().ToString() + " Name: " + name.ToString()); Type type = value.GetType(); TypeHandlerCallback handler = GetTypeHandler(type.GenericTypeArguments[0]); if (handler == null) { throw new System.NotImplementedException($"{type}"); } //TreeViewItem root = new TreeViewItem() { Header = type }; TreeViewItem root = new TreeViewItem() { Header = name }; int i = 0; foreach (var element in (IList)value) { string elementName = $"{name}[{i++}]"; Control propertyField = handler(elementName, element); AddItem(root, elementName, propertyField); } return(root); }
// ================ // = Misc Methods = // ================ public void AddField(TreeViewItem parent, object dataOwner, FieldInfo fieldInfo) { Type fieldType = fieldInfo.FieldType; TypeHandlerCallback handler = GetTypeHandler(fieldType); if (handler == null) { throw new System.NotImplementedException($"{fieldType}, {fieldType.UnderlyingSystemType}"); } Control propertyField = handler(fieldInfo.Name, fieldInfo.GetValue(dataOwner)); AddItem(parent, fieldInfo.Name, propertyField); }
public TypeHandlerCallback GetTypeHandler(Type type) { TypeHandlerCallback handler = null; // explicit types TypeHandlers.TryGetValue(type, out handler); if (handler != null) { return(handler); } // derived types TypeHandlers.TryGetValue(type.BaseType, out handler); if (handler != null) { return(handler); } // generic types TypeHandlers.TryGetValue(type.GetGenericTypeDefinition(), out handler); return(HandleList); }