private Control CreateBoundControl(PropertyInfo propertyInfo, TreeViewColumn col, object context, object value) { var binder = new PropertyBinding { PropertyInfo = propertyInfo, Context = context, ColumnInformation = col, }; binder.Changed += BoundControlOnChanged; binder.Control = null; if (_bindings.ContainsKey(context) == false) { _bindings[context] = new List <PropertyBinding>(); } _bindings[context].Add(binder); Control control; if (col is TreeViewTextFieldColumn) { var textBox = new TextField { Text = value + "" }; textBox.Changed += (sender, oldValue) => binder.OnChangeString(sender.Text); control = textBox; } else if (col is TreeViewSliderColumn) { var sliderCol = (TreeViewSliderColumn)col; var slider = new HorizontalSlider { Value = (float)value, Min = sliderCol.Min, Max = sliderCol.Max }; slider.Changed += p => binder.OnChangeTyped(p.Value); control = slider; } else if (col is TreeViewToggleColumn) { var toggle = new Toggle { IsChecked = (bool)value }; toggle.Changed += p => binder.OnChangeTyped(p.IsChecked); control = toggle; } else if (col is TreeViewObjectFieldColumn) { var objectField = new ObjectField { Object = (Object)value }; objectField.Changed += (sender, oldObject) => sender.Object = oldObject; control = objectField; } else if (col is TreeViewParseNumberColumn) { throw new NotImplementedException(); } else { if (value is Texture) { var image = new Image { Texture2D = (Texture2D)value, Width = 20, Height = 20 }; control = image; } else { var text = new Label { Content = value }; control = text; } } binder.Control = control; return(control); }