예제 #1
0
        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);
        }