public void GenerateChildren(ViewModelContext context, IViewModelNode viewModelNode, ref bool handled) { if (viewModelNode.NodeValue is EffectBuilder) { viewModelNode.Children.Add(new ViewModelNode("Name", new PropertyInfoViewModelContent(new ParentNodeValueViewModelContent(), typeof(EffectBuilder).GetProperty("Name")))); viewModelNode.Children.Add(new ViewModelNode("EventOpen", new RootViewModelContent((ExecuteCommand)((viewModel2, parameter) => { selectedEntitiesContext.ViewModelByGuid.Clear(); selectedEntitiesContext.Root = selectedEntitiesContext.GetModelView(viewModel2.Parent.NodeValue); })))); viewModelNode.Children.Add(new ViewModelNode("Definition", new AsyncViewModelContent <EffectDefinition>(new ParentNodeValueViewModelContent(), operand => new EffectDefinition { Plugins = ((EffectBuilder)operand.Value).Plugins.Select(x => { var pluginDefinition = new EffectPluginDefinition { PluginType = x.GetType().AssemblyQualifiedName, Parameters = new Dictionary <string, EffectParameterDefinition>() }; foreach (var property in x.GetType().GetProperties(BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Instance)) { if (property.GetCustomAttributes(typeof(EffectDefinitionPropertyAttribute), true).Length == 0) { continue; } // Check type and do some simple conversion var value = property.GetValue(x, null); if (typeof(RenderPassPlugin).IsAssignableFrom(property.PropertyType)) { value = Guid.NewGuid(); } else if (!typeof(ShaderSource).IsAssignableFrom(property.PropertyType) && !property.PropertyType.IsValueType) { throw new NotSupportedException(); } pluginDefinition.Parameters.Add(property.Name, new EffectParameterDefinition(property.PropertyType, value)); } return(pluginDefinition); }).ToList() }))); //new AsyncViewModelContent<EffectDefinition>(() => ) { LoadState = ViewModelContentState.NotLoaded, Flags = ViewModelFlags.Static | ViewModelFlags.Async | ViewModelFlags.Serialize }); } }
public void GenerateChildren(ViewModelContext context, IViewModelNode viewModelNode, ref bool handled) { if (viewModelNode.NodeValue is EffectBuilder) { viewModelNode.Children.Add(new ViewModelNode("Name", new PropertyInfoViewModelContent(new ParentNodeValueViewModelContent(), typeof(EffectBuilder).GetProperty("Name")))); viewModelNode.Children.Add(new ViewModelNode("EventOpen", new RootViewModelContent((ExecuteCommand)((viewModel2, parameter) => { selectedEntitiesContext.ViewModelByGuid.Clear(); selectedEntitiesContext.Root = selectedEntitiesContext.GetModelView(viewModel2.Parent.NodeValue); })))); viewModelNode.Children.Add(new ViewModelNode("Definition", new AsyncViewModelContent<EffectDefinition>(new ParentNodeValueViewModelContent(), operand => new EffectDefinition { Plugins = ((EffectBuilder)operand.Value).Plugins.Select(x => { var pluginDefinition = new EffectPluginDefinition { PluginType = x.GetType().AssemblyQualifiedName, Parameters = new Dictionary<string, EffectParameterDefinition>() }; foreach (var property in x.GetType().GetProperties(BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Instance)) { if (property.GetCustomAttributes(typeof(EffectDefinitionPropertyAttribute), true).Length == 0) continue; // Check type and do some simple conversion var value = property.GetValue(x, null); if (typeof(RenderPassPlugin).IsAssignableFrom(property.PropertyType)) { value = Guid.NewGuid(); } else if (!typeof(ShaderSource).IsAssignableFrom(property.PropertyType) && !property.PropertyType.IsValueType) { throw new NotSupportedException(); } pluginDefinition.Parameters.Add(property.Name, new EffectParameterDefinition(property.PropertyType, value)); } return pluginDefinition; }).ToList() }))); //new AsyncViewModelContent<EffectDefinition>(() => ) { LoadState = ViewModelContentState.NotLoaded, Flags = ViewModelFlags.Static | ViewModelFlags.Async | ViewModelFlags.Serialize }); } }