public override DataTemplate SelectTemplate(object item, DependencyObject container) { FrameworkElement element = container as FrameworkElement; ObjectMemberViewModel member = item as ObjectMemberViewModel; if (member.Type == CommunicatorClient.Types.Bool) { return(element.FindResource("BoolMemberDataTemplate") as DataTemplate); } else if (member.Type > CommunicatorClient.Types.Bool && member.Type < CommunicatorClient.Types.String) { return(element.FindResource("NumericMemberDataTemplate") as DataTemplate); } else if (member.Type == CommunicatorClient.Types.Array) { return(element.FindResource("ArrayMemberDataTemplate") as DataTemplate); } else if (member.Type == CommunicatorClient.Types.Vector3) { return(element.FindResource("Vector3MemberDataTemplate") as DataTemplate); } else if (member.Type == CommunicatorClient.Types.Enum) { return(element.FindResource("EnumMemberDataTemplate") as DataTemplate); } else if (member.Type == CommunicatorClient.Types.Color) { return(element.FindResource("ColorMemberDataTemplate") as DataTemplate); } else if (member.Type == CommunicatorClient.Types.Vector2) { return(element.FindResource("Vector2MemberDataTemplate") as DataTemplate); } else if (member.Type == CommunicatorClient.Types.Rect) { return(element.FindResource("RectMemberDataTemplate") as DataTemplate); } else if (member.Type == CommunicatorClient.Types.GameObject) { return(element.FindResource("GameObjectMemberDataTemplate") as DataTemplate); } else if (member.Type != CommunicatorClient.Types.Unknown) { return(element.FindResource("TextBoxMemberDataTemplate") as DataTemplate); } else { return(element.FindResource("UnknownMemberDataTemplate") as DataTemplate); } }
List<ObjectMemberViewModel> LoadPropertiesAndFields() { List<ObjectMemberViewModel> list = new List<ObjectMemberViewModel>(); BindingFlags flags = BindingFlags.DeclaredOnly | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance; Type currentType = _instance.GetType(); while (currentType != null) { foreach (FieldInfo field in currentType.GetFields(flags)) list.Add(new ObjectMemberViewModel(this, field)); foreach (PropertyInfo property in currentType.GetProperties(flags)) { if (IsPropertyDisplayable(property, currentType)) { ObjectMemberViewModel viewModel = new ObjectMemberViewModel(this, property); if (!list.Any(item => item.DisplayName == viewModel.DisplayName)) list.Add(viewModel); } } currentType = currentType.BaseType; } if (_instance is IEnumerable) { int index = 0; foreach (object value in (_instance as IEnumerable)) { list.Add(new ObjectMemberViewModel(this, value, index)); // Stop at 1000, just so it doesn't take forever to load. if (++index == 1000) { list.Add(new ObjectMemberViewModel(this, "--Crack.NET displays up to 1000 collection items--", Int32.MaxValue)); break; } } } list.Sort(MemoryExplorerListItemViewModel.CompareListItems); return list; }