private void Delete(DataSchemaItem i)
 {
     if (i != null)
     {
         Source.Remove(i);
     }
 }
        private void OnSchemaChanged(DataSchemaItem dataSchemaItem)
        {
            if (!_templateApplied || dataSchemaItem == null)
            {
                return;
            }

            PART_ControlPanel.Children.Clear();

            Title = dataSchemaItem.PropertyLabel;

            switch (dataSchemaItem.DataType)
            {
            case DataType.FromSource:
                var lv = new ListView
                {
                    ItemsSource   = dataSchemaItem.DataSource,
                    SelectionMode = dataSchemaItem.IsMultiSelect ? ListViewSelectionMode.Multiple : ListViewSelectionMode.Single,
                    ItemsPanel    = PART_ControlPanel.Resources["2RowUniformGridPanelTemplate"] as ItemsPanelTemplate
                };

                lv.SelectionChanged += DataSource_SelectionChanged;
                _controlObject       = lv;

                break;

            case DataType.Range:

                var slider = new RangeSelector
                {
                    Minimum = dataSchemaItem.Min,
                    Maximum = dataSchemaItem.Max,
                };

                slider.ValueChanged += Slider_ValueChanged;

                _controlObject = slider;

                break;

            case DataType.Boolean:

                var toggle = new ToggleButton
                {
                    Content = dataSchemaItem.PropertyLabel
                };

                PART_TitlePresenter.Visibility = Visibility.Collapsed;

                toggle.Checked   += Toggle_CheckedChanged;
                toggle.Unchecked += Toggle_CheckedChanged;

                _controlObject = toggle;
                break;

            default:
                break;
            }

            PART_ControlPanel.Children.Add(_controlObject);
        }