Exemple #1
0
        public virtual T SaveWindowControls(StackPanel control, string name, Type type, object[] attributes)
        {
            try
            {
                //create instance of type here; object always starts null?
                T obj = (T)ReflectionExt.CreateMinimalInstance(type);

                List <MemberInfo> myFields = type.GetEditableMembers();

                List <List <MemberInfo> > tieredFields = new List <List <MemberInfo> >();
                for (int ii = 0; ii < myFields.Count; ii++)
                {
                    if (myFields[ii].GetCustomAttributes(typeof(NonEditedAttribute), false).Length > 0)
                    {
                        continue;
                    }
                    if (myFields[ii].GetCustomAttributes(typeof(NonSerializedAttribute), false).Length > 0)
                    {
                        continue;
                    }

                    object member = myFields[ii].GetValue(obj);
                    if (member == null && myFields[ii].GetCustomAttributes(typeof(NonNullAttribute), false).Length > 0)
                    {
                        throw new Exception("Null class member found in " + type.ToString() + ": " + myFields[ii].Name);
                    }

                    if (myFields[ii].GetCustomAttributes(typeof(SharedRowAttribute), false).Length == 0)
                    {
                        tieredFields.Add(new List <MemberInfo>());
                    }

                    tieredFields[tieredFields.Count - 1].Add(myFields[ii]);
                }

                int controlIndex = 0;
                for (int ii = 0; ii < tieredFields.Count; ii++)
                {
                    if (tieredFields[ii].Count == 1)
                    {
                        MemberInfo myInfo = tieredFields[ii][0];
                        object     member = DataEditor.SaveMemberControl(obj, (StackPanel)control.Children[controlIndex], myInfo.Name, myInfo.GetMemberInfoType(), myInfo.GetCustomAttributes(false), false);
                        myInfo.SetValue(obj, member);
                        controlIndex++;
                    }
                    else
                    {
                        Grid sharedRowControl      = (Grid)control.Children[controlIndex];
                        int  sharedRowControlIndex = 0;
                        for (int jj = 0; jj < tieredFields[ii].Count; jj++)
                        {
                            MemberInfo myInfo = tieredFields[ii][jj];
                            object     member = DataEditor.SaveMemberControl(obj, (StackPanel)sharedRowControl.Children[jj], myInfo.Name, myInfo.GetMemberInfoType(), myInfo.GetCustomAttributes(false), false);
                            myInfo.SetValue(obj, member);
                            sharedRowControlIndex++;
                        }
                        controlIndex++;
                    }
                }
                return(obj);
            }
            catch (Exception e)
            {
                DiagManager.Instance.LogError(e);
                return(default(T));
            }
        }