private void UpdateObject(object e)
        {
            int  index = lbxEnteties.Items.IndexOf(e);
            Type temp5 = e.GetType();

            if (temp5 == typeof(String))
            {
                foreach (PropertyEditor edi in spnlControls.Children)
                {
                    foreach (Control c in edi.ContentGrid.Children)
                    {
                        if (c.GetType() == typeof(TextboxExt))
                        {
                            TextBox t  = c as TextBox;
                            int     ei = ObjectList.IndexOf(e);
                            ObjectList[ei] = t.Text;// = t.Text;
                        }
                    }
                }
                lbxEnteties.Items.Refresh();
                return;
            }
            foreach (PropertyEditor ed in spnlControls.Children)
            {
                foreach (Control c in ed.ContentGrid.Children)
                {
                    if (c.GetType() == typeof(System.Windows.Controls.Label))
                    {
                        continue;
                    }
                    if (c.GetType() == typeof(ButtonExt))
                    {
                        ButtonExt bx = c as ButtonExt;

                        PropertyInfo pi = lbxEnteties.Items[index].GetType().GetProperty(bx.PropertyName);
                        if (bx.ObjectToModyfy != null)
                        {
                            pi.SetValue(lbxEnteties.Items[index], bx.ObjectToModyfy, null);
                        }
                    }
                    else if (c.GetType() == typeof(TextboxExt))
                    {
                        TextboxExt   bx = c as TextboxExt;
                        PropertyInfo pi = lbxEnteties.Items[index].GetType().GetProperty(bx.PropertyName);
                        if (bx.ObjectToModyfy != null)
                        {
                            if (pi.PropertyType.Name.ToLower() == "string")
                            {
                                pi.SetValue(lbxEnteties.Items[index], bx.Text, null);
                            }
                            else if (pi.PropertyType.Name.ToLower() == "int32")
                            {
                                string temp = bx.Text.Replace(",", ".");//;
                                pi.SetValue(lbxEnteties.Items[index], Convert.ToInt32(temp), null);
                            }
                            else if (pi.PropertyType.Name.ToLower() == "double")
                            {
                                string temp = bx.Text.Replace(".", ",");
                                pi.SetValue(lbxEnteties.Items[index], Convert.ToDouble(temp), null);
                            }
                            else if (pi.PropertyType.Name.ToLower() == "float")
                            {
                                string temp = bx.Text.Replace(".", ",");
                                pi.SetValue(lbxEnteties.Items[index], Convert.ToDouble(temp), null);
                            }
                        }
                    }
                    else if (c.GetType() == typeof(CheckBoxExt))
                    {
                        CheckBoxExt  bx = c as CheckBoxExt;
                        PropertyInfo pi = lbxEnteties.Items[index].GetType().GetProperty(bx.PropertyName);
                        pi.SetValue(lbxEnteties.Items[index], bx.IsChecked, null);
                    }
                    else if (c.GetType() == typeof(ComboBoxExt))
                    {
                        ComboBoxExt  bx  = c as ComboBoxExt;
                        PropertyInfo pin = lbxEnteties.Items[index].GetType().GetProperty(bx.PropertyName);
                        if (bx.ObjectToModyfy != null)
                        {
                            FieldInfo fofi = bx.SelectedItem as FieldInfo;// NUllable???
                            if (fofi != null)
                            {
                                string name    = fofi.Name;
                                Type   genType = GetGenericType(pin.GetValue(lbxEnteties.Items[index], null));
                                pin.SetValue(lbxEnteties.Items[index], Enum.Parse(genType, name), null);//pin.PropertyType
                            }
                        }
                    }
                }
            }
            lbxEnteties.Items.Refresh();
        }
        public void Reflect()
        {
            PropertyInfo[] pit;
            if (theObject != null)
            {
                pit = theObject.GetType().GetProperties();
            }
            else
            {
                pit = objectType.GetProperties();
            }

            foreach (PropertyInfo pi in pit)
            {
                if (pi.CanWrite)
                {
                    PropertyEditor ed = new PropertyEditor();

                    // get type and cast selected object to this type?

                    ed.lblName.Content = pi.Name;
                    //Type type = theObject.GetType().GetProperty(pi.Name).PropertyType;
                    ed.lblName.ToolTip = pi.PropertyType.IsPublic.ToString();
                    UIElement ue  = null;
                    UIElement ue2 = null;
                    switch (pi.PropertyType.Name.ToLower())
                    {
                    case "string":
                    {
                        TextboxExt tb  = new TextboxExt();
                        object     obj = pi.GetValue(theObject, null);
                        if (obj != null)
                        {
                            tb.Text           = obj.ToString();
                            tb.ObjectToModyfy = obj;
                        }
                        tb.PropertyName = pi.Name;
                        tb.ToolTip      = pi.PropertyType.Name;
                        tb.Height       = 20;
                        ue = tb;
                        break;
                    }

                    case "list`1":
                    {
                        TextboxExt tb    = new TextboxExt();
                        Type       tTemp = GetGenericType(pi.GetValue(theObject, null));

                        tb.Text    = tTemp.Name;
                        tb.ToolTip = "(" + tTemp.Name + ") list<>";

                        tb.PropertyName = pi.Name;
                        tb.Height       = 20;
                        tb.IsEnabled    = false;
                        ButtonExt btn = new ButtonExt();
                        btn.ObjectToModyfy      = pi.GetValue(theObject, null);
                        btn.PropertyName        = pi.Name;
                        btn.Content             = "[..]";
                        btn.HorizontalAlignment = HorizontalAlignment.Left;
                        btn.Click += new RoutedEventHandler(btn_Click);
                        btn.Width  = 20;
                        ue2        = btn;
                        ue         = tb;

                        break;
                    }

                    case "double":
                    {
                        TextboxExt tb = new TextboxExt();
                        tb.Text           = theObject == null ? null : pi.GetValue(theObject, null).ToString();
                        tb.PropertyName   = pi.Name;
                        tb.ObjectToModyfy = theObject == null ? null : pi.GetValue(theObject, null);
                        tb.Height         = 20;
                        tb.ToolTip        = pi.PropertyType.Name;
                        ue = tb;
                        break;
                    }

                    case "int32":
                    {
                        TextboxExt tb = new TextboxExt();
                        tb.Text           = pi.GetValue(theObject, null).ToString();
                        tb.PropertyName   = pi.Name;
                        tb.ObjectToModyfy = pi.GetValue(theObject, null);
                        tb.Height         = 20;
                        tb.ToolTip        = pi.PropertyType.Name;
                        ue = tb;
                        break;
                    }

                    case "boolean":
                    {
                        CheckBoxExt chk = new CheckBoxExt();
                        chk.PropertyName = pi.Name;
                        object obj = pi.GetValue(theObject, null);
                        chk.ObjectToModyfy = obj;
                        chk.IsChecked      = (bool)obj;
                        chk.ToolTip        = pi.PropertyType.Name;
                        ue = chk;
                        break;
                    }

                    default:
                    {
                        if (pi.PropertyType.IsEnum)
                        {
                            ComboBoxExt bx = new ComboBoxExt();
                            bx.PropertyName      = pi.Name;
                            bx.DisplayMemberPath = "Name";
                            bx.ToolTip           = pi.PropertyType.Name;
                            foreach (FieldInfo feif in pi.PropertyType.GetFields())
                            {
                                if (feif.Name != "value__")
                                {
                                    bx.Items.Add(feif);
                                }
                            }
                            bx.ObjectToModyfy = pi.GetValue(theObject, null);
                            bx.SelectedItem   = pi.PropertyType.GetField(pi.GetValue(theObject, null).ToString());
                            ue = bx;
                        }
                        else if (pi.PropertyType.IsGenericType &&
                                 pi.PropertyType.GetGenericTypeDefinition() ==
                                 typeof(Nullable <>))
                        {
                            TextBox tb    = new TextBox();
                            Type    tTemp = GetGenericType(pi.GetValue(theObject, null));

                            Type propType = pi.PropertyType;
                            if (propType.IsGenericType &&
                                propType.GetGenericTypeDefinition() ==
                                typeof(Nullable <>))
                            {
                                Type[] typeCol = propType.GetGenericArguments();
                                Type   nullableType;
                                if (typeCol.Length > 0)
                                {
                                    nullableType = typeCol[0];
                                    if (nullableType.BaseType == typeof(Enum))
                                    {
                                        ComboBox bx = new ComboBox();
                                        foreach (FieldInfo feif in nullableType.GetFields())
                                        {
                                            if (feif.Name != "value__")
                                            {
                                                bx.Items.Add(feif);
                                            }
                                        }
                                        ue = bx;
                                    }
                                }
                            }
                        }
                        else
                        {
                            if (pi.PropertyType == typeof(object))
                            {
                            }
                        }
                        break;
                    }
                    }
                    if (ue != null)
                    {
                        // ue.SetValue(Grid.ColumnProperty, 0);
                        ue.SetValue(Grid.VerticalAlignmentProperty, VerticalAlignment.Center);
                        ed.ContentGrid.Children.Add(ue);
                        if (ue2 != null)
                        {
                            //ue2.SetValue(Grid.ColumnProperty, 0);
                            ue2.SetValue(Grid.VerticalAlignmentProperty, VerticalAlignment.Center);
                            ed.ContentGrid.Children.Add(ue2);
                        }
                    }

                    spnlControls.Children.Add(ed);
                }
            }
        }
        public void Reflect()
        {
            spnlControls.Children.Clear();


            if (lbxEnteties.SelectedItem != null)
            {
                Type temp = lbxEnteties.SelectedItem.GetType();

                if (temp == typeof(String))
                {
                    PropertyEditor ed = new PropertyEditor();
                    TextboxExt     tb = new TextboxExt();
                    tb.Width          = 150;
                    tb.ObjectToModyfy = lbxEnteties.SelectedItem.ToString();
                    tb.Text           = lbxEnteties.SelectedItem.ToString();
                    UIElement ue = tb;
                    ue.SetValue(Grid.ColumnProperty, 1);
                    ue.SetValue(Grid.VerticalAlignmentProperty, VerticalAlignment.Center);
                    ed.ContentGrid.Children.Add(ue);
                    spnlControls.Children.Add(ed);
                    return;
                }
                foreach (PropertyInfo fi in lbxEnteties.SelectedItem.GetType().GetProperties())
                {
                    if (fi.CanWrite)
                    {
                        Type type = fi.PropertyType.GetType();;

                        // get type and cast selected object to this type?
                        PropertyEditor ed = new PropertyEditor();
                        ed.lblName.Content = fi.Name;
                        ed.lblName.ToolTip = fi.PropertyType.IsPublic.ToString();
                        UIElement ue  = null;
                        UIElement ue2 = null;
                        switch (fi.PropertyType.Name.ToLower())
                        {
                        case "string":
                        {
                            TextboxExt tb  = new TextboxExt();
                            object     obj = fi.GetValue(lbxEnteties.SelectedItem, null);
                            if (obj != null)
                            {
                                tb.Text           = obj.ToString();
                                tb.ObjectToModyfy = obj;
                            }
                            else
                            {
                                tb.ObjectToModyfy = "";
                            }
                            tb.PropertyName = fi.Name;
                            tb.ToolTip      = fi.PropertyType.Name;
                            tb.Height       = 20;
                            ue = tb;
                            break;
                        }

                        case "list`1":
                        {
                            TextboxExt tb    = new TextboxExt();
                            Type       tTemp = GetGenericType(fi.GetValue(lbxEnteties.SelectedItem, null));
                            tb.PropertyName   = fi.Name;
                            tb.Text           = tTemp.Name;
                            tb.ObjectToModyfy = fi.GetValue(lbxEnteties.SelectedItem, null);
                            tb.Height         = 20;
                            tb.ToolTip        = "(" + tTemp.Name + ") list<>";
                            // tb.IsEnabled = false;
                            ButtonExt btn = new ButtonExt();
                            btn.Tag                 = fi.GetValue(lbxEnteties.SelectedItem, null);
                            btn.PropertyName        = fi.Name;
                            btn.ObjectToModyfy      = fi.GetValue(lbxEnteties.SelectedItem, null);
                            btn.Content             = "[..]";
                            btn.HorizontalAlignment = HorizontalAlignment.Left;
                            btn.Click              += new RoutedEventHandler(btn_Click);
                            btn.Width               = 20;
                            ue2 = btn;
                            ue  = tb;
                            break;
                        }

                        case "double":
                        {
                            TextboxExt tb = new TextboxExt();
                            tb.Text           = fi.GetValue(lbxEnteties.SelectedItem, null).ToString();
                            tb.ObjectToModyfy = fi.GetValue(lbxEnteties.SelectedItem, null);
                            if (tb.ObjectToModyfy == null)
                            {
                                tb.ObjectToModyfy = "";
                            }
                            tb.Height       = 20;
                            tb.PropertyName = fi.Name;
                            tb.ToolTip      = fi.PropertyType.Name;
                            ue = tb;
                            break;
                        }

                        case "int32":
                        {
                            TextboxExt tb = new TextboxExt();
                            tb.Text           = fi.GetValue(lbxEnteties.SelectedItem, null).ToString();
                            tb.ObjectToModyfy = fi.GetValue(lbxEnteties.SelectedItem, null);
                            if (tb.ObjectToModyfy == null)
                            {
                                tb.ObjectToModyfy = "";
                            }
                            tb.Height       = 20;
                            tb.ToolTip      = fi.PropertyType.Name;
                            tb.PropertyName = fi.Name;
                            ue = tb;
                            break;
                        }

                        case "boolean":
                        {
                            CheckBoxExt chk = new CheckBoxExt();
                            chk.IsChecked      = (bool)fi.GetValue(lbxEnteties.SelectedItem, null);
                            chk.ToolTip        = fi.PropertyType.Name;
                            chk.ObjectToModyfy = fi.GetValue(lbxEnteties.SelectedItem, null);
                            if (chk.ObjectToModyfy == null)
                            {
                                chk.ObjectToModyfy = false;
                            }
                            chk.PropertyName = fi.Name;
                            ue = chk;
                            break;
                        }

                        default:
                        {
                            if (fi.PropertyType.IsEnum)
                            {
                                ComboBoxExt bx = new ComboBoxExt();
                                bx.DisplayMemberPath = "Name";
                                bx.ToolTip           = fi.PropertyType.Name;
                                bx.ObjectToModyfy    = fi.GetValue(lbxEnteties.SelectedItem, null);
                                bx.PropertyName      = fi.Name;
                                foreach (FieldInfo feif in fi.PropertyType.GetFields())
                                {
                                    if (feif.Name != "value__")
                                    {
                                        bx.Items.Add(feif);
                                    }
                                }


                                bx.SelectedItem = fi.GetValue(lbxEnteties.SelectedItem, null);

                                ue = bx;
                            }
                            else if (fi.PropertyType.IsGenericType &&
                                     fi.PropertyType.GetGenericTypeDefinition() ==
                                     typeof(Nullable <>))
                            {
                                TextboxExt tb    = new TextboxExt();
                                Type       tTemp = GetGenericType(fi.GetValue(lbxEnteties.SelectedItem, null));
                                tb.PropertyName   = fi.Name;
                                tb.ObjectToModyfy = fi.GetValue(lbxEnteties.SelectedItem, null);
                                Type propType = fi.PropertyType;
                                if (propType.IsGenericType &&
                                    propType.GetGenericTypeDefinition() ==
                                    typeof(Nullable <>))
                                {
                                    Type[] typeCol = propType.GetGenericArguments();
                                    Type   nullableType;
                                    if (typeCol.Length > 0)
                                    {
                                        nullableType = typeCol[0];
                                        if (nullableType.BaseType == typeof(Enum))
                                        {
                                            ComboBoxExt bx = new ComboBoxExt();
                                            bx.ObjectToModyfy = fi.GetValue(lbxEnteties.SelectedItem, null);
                                            bx.PropertyName   = fi.Name;
                                            foreach (FieldInfo feif in nullableType.GetFields())
                                            {
                                                if (feif.Name != "value__")
                                                {
                                                    bx.Items.Add(feif);
                                                }
                                            }
                                            ue = bx;
                                        }
                                    }
                                }
                            }
                            else
                            {
                                ButtonExt btn = new ButtonExt();
                                btn.PropertyName   = fi.Name;
                                btn.Content        = fi.Name;
                                btn.ObjectToModyfy = fi.GetValue(lbxEnteties.SelectedItem, null);
                                btn.EditingType    = fi.PropertyType;
                                btn.Click         += new RoutedEventHandler(btn_ClickOeditor);
                                ue = btn;
                            }

                            break;
                        }
                        }
                        if (ue != null)
                        {
                            ue.SetValue(Grid.ColumnProperty, 1);
                            ue.SetValue(Grid.VerticalAlignmentProperty, VerticalAlignment.Center);
                            ed.ContentGrid.Children.Add(ue);
                            if (ue2 != null)
                            {
                                ue2.SetValue(Grid.ColumnProperty, 2);
                                ue2.SetValue(Grid.VerticalAlignmentProperty, VerticalAlignment.Center);
                                ed.ContentGrid.Children.Add(ue2);
                            }
                        }
                        if (ed != null)
                        {
                            spnlControls.Children.Add(ed);
                        }
                    }
                }
            }
        }