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);
            }
        }
Exemplo n.º 2
0
        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;
        }