void ClassListBoxOnSelectionChanged(object sender, SelectionChangedEventArgs args) { ListBox lstbox = sender as ListBox; ClassAndProperty item = lstbox.SelectedItem as ClassAndProperty; itemsProperties.Items.Clear(); if (item != null) { // Get constructor and properties. ConstructorInfo construct = item.Type.GetConstructor(Type.EmptyTypes); object obj = construct.Invoke(null); PropertyInfo[] props = item.Type.GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (PropertyInfo prop in props) { if (prop.PropertyType == typeof(int) || prop.PropertyType == typeof(Point3D) || prop.PropertyType == typeof(Vector3D) || prop.PropertyType == typeof(double)) { PropertyAndValue propvalue = new PropertyAndValue(prop, prop.GetValue(obj, null).ToString()); itemsProperties.Items.Add(propvalue); } } DoDump(); } }
// Gets the MeshGeometry3D and converts to XAML. void DoDump() { txtboxDump.Text = String.Empty; ClassAndProperty item = lstboxClass.SelectedItem as ClassAndProperty; if (item != null) { // Create the object with the MeshGeometry3D property. ConstructorInfo construct = item.Type.GetConstructor(Type.EmptyTypes); object obj = construct.Invoke(null); bool isError = false; // Get all the proeprties and set them. foreach (object objPropValue in itemsProperties.Items) { PropertyAndValue propvalue = objPropValue as PropertyAndValue; string str = propvalue.Value; Type typeProperty = propvalue.Property.PropertyType; MethodInfo method = typeProperty.GetMethod("Parse", new Type[] { typeof(string) }); object objValue; try { objValue = method.Invoke(obj, new object[] { str }); } catch { Console.WriteLine("catch1"); txtboxDump.Text += "Value for property " + propvalue.Property.Name + " cannot be parsed\n"; isError = true; continue; } try { propvalue.Property.SetValue(obj, objValue, null); } catch { Console.WriteLine("catch2"); txtboxDump.Text += "Value for property " + propvalue.Property.Name + " cannot be set\n"; isError = true; continue; } } if (!isError) { // Dump the MeshGeometry3D. MeshGeometry3D geo = item.Property.GetValue(obj, null) as MeshGeometry3D; XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.IndentChars = new string(' ', 4); settings.NewLineOnAttributes = true; settings.OmitXmlDeclaration = true; StringBuilder strbuild = new StringBuilder(); XmlWriter xmlwrite = XmlWriter.Create(strbuild, settings); XamlWriter.Save(geo, xmlwrite); txtboxDump.Text = strbuild.ToString(); } } }