private void ShowAttributeParas(BinaryAttribute ba, StackPanel sp)
        {
            CheckBox cb = new CheckBox
            {
                Content   = "非对称",
                IsChecked = ba.IsAsymmetry
            };


            cb.Checked   += (s, e) => { ba.IsAsymmetry = true; };
            cb.Unchecked += (s, e) => { ba.IsAsymmetry = false; };

            TextBlock t0 = new TextBlock()
            {
                Text = "值为0的字符串"
            };

            TextBlock tb0 = new TextBlock()
            {
                Text = ba.Value0
            };

            TextBlock t1 = new TextBlock()
            {
                Text = "值为1的字符串"
            };

            TextBlock tb1 = new TextBlock()
            {
                Text = ba.Value1
            };;

            Button switchButton = new Button()
            {
                Content = "对换"
            };

            switchButton.Click += (s, e) =>
            {
                ba.SwitchValue();
                tb0.Text = ba.Value0;
                tb1.Text = ba.Value1;
            };

            sp.Children.Clear();
            sp.Children.Add(cb);
            sp.Children.Add(t0);
            sp.Children.Add(tb0);
            sp.Children.Add(t1);
            sp.Children.Add(tb1);

            sp.Children.Add(switchButton);
        }
        private void AttributeType_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var cb = (sender as ComboBox);

            if (cb.SelectedItem == null)
            {
                return;
            }

            StackPanel fsp = cb.Parent as StackPanel;
            var        sp  = fsp.Children[2] as StackPanel;
            int        i   = GetIndexOfStackPanel(fsp);

            try
            {
                ClearTips();
                switch (cb.SelectedIndex)
                {
                case 0:
                    var ba = new BinaryAttribute(AttributesNames[i]);
                    Data.Attributes[i] = ba;
                    ba.SetValueFromData(Data[ba].RowsOfData);
                    ShowAttributeParas(Data.Attributes[i] as BinaryAttribute, sp);
                    break;

                case 1:
                    var nora = new NorminalAttribute(AttributesNames[i]);
                    Data.Attributes[i] = nora;
                    nora.SetNorminalsFromData(Data[nora].RowsOfData);
                    sp.Children.Clear();
                    break;

                case 2:
                    Data.Attributes[i] = new OrdinalAttribute(AttributesNames[i]);
                    ShowAttributeParas(Data.Attributes[i] as OrdinalAttribute, sp);
                    break;

                case 3:
                    var na = new NumericalAttribute(AttributesNames[i]);
                    Data.Attributes[i] = na;
                    na.SetMaxMinuxMinFromData(Data[na].RowsOfData);
                    sp.Children.Clear();
                    break;
                }
            }
            catch (Exception excp)
            {
                ShowTips(excp.Message);
                cb.SelectedItem = null;
            }
        }