• WPF中RadioButton的分组


    当界面上出现多组Radiobutton时,将所有的Radiobutton写在同一个Grid里面,导致系统认为所有的Radiobutton是同一组,造成选择混乱,解决的方法:

    1.要为属于同个组的Radiobutton设置相同的GroupName,绑定同一个变量;

    2.若没有为Radiobutton设置GroupName,则将属于同一组的Radiobutton放在一个容器中,如wrappannel里面。

    通常为Radiobutton设置转化器,将不同的button上对应的值,与选中与不选中进行转换,下面展示例子,示例中有三种转换器:EnumToBoolConverter,IntToBoolConverter,FloatToBoolConverter。代码如下(示例采用的MVVM模式):

    ///model中代码

           public enum ProtocolTypeDefine
            {
                RS232,            
                RS485            
            }
    
            private ProtocolTypeDefine _protocolType;
            private int _dataBits;    
            private float _stopBits;
            /// <summary>
            /// 协议类型
            /// </summary>
            public ProtocolTypeDefine ProtocolType
            {
                get
                {
                    return _protocolType;
                }
                set
                {
                    _protocolType = value;
                   RaisePropertyChanged( ()=>ProtocolType );
                }
            }
    
            /// <summary>
            /// 数据位
            /// </summary>
            public int DataBits
            {
                get
                {
                    return _dataBits;
                }
                set
                {
                    _dataBits = value;
                   RaisePropertyChanged( ()=> DataBits );
                }
            }
            /// <summary>
            /// 停止位
            /// </summary>
            public float StopBits
            {
                get
                {
                    return _stopBits;
                }
                set
                {
                    _stopBits = value;
                    RaisePropertyChanged( ()=>StopBits );
                }
            }

    //view.xaml中代码

    <UserControl.Resources>
      <local:IntToBoolConverter x:Key="IntToBoolConverter"></local:IntToBoolConverter>
      <local:FloatToBoolConverter x:Key="FloatToBoolConverter"></local:FloatToBoolConverter>
      <local:EnumToBoolConverter x:Key="EnumToBoolConverter"></local:EnumToBoolConverter>
    </UserControl.Resources>
    
    <RadioButton Grid.Row="0" Grid.Column="0" Content="RS232" IsChecked="{Binding SerialSetModel.ProtocolType, Converter={StaticResource EnumToBoolConverter}, ConverterParameter= 0 }"  HorizontalAlignment="Left" VerticalAlignment="Center"/>
    <RadioButton Grid.Row="0" Grid.Column="1" Content="RS485" IsChecked="{Binding SerialSetModel.ProtocolType, Converter={StaticResource EnumToBoolConverter}, ConverterParameter= 1 }"  HorizontalAlignment="Left" VerticalAlignment="Center"/>
    
    
    <RadioButton Grid.Row="2" Grid.Column="1" GroupName="DataBits" Content="6" IsChecked="{Binding SerialSetModel.DataBits, Converter ={StaticResource IntToBoolConverter}, ConverterParameter= 6}"></RadioButton>
    <RadioButton Grid.Row="2" Grid.Column="2" GroupName="DataBits" Content="7" IsChecked="{Binding SerialSetModel.DataBits, Converter ={StaticResource IntToBoolConverter}, ConverterParameter= 7}"></RadioButton>
    <RadioButton Grid.Row="2" Grid.Column="3" GroupName="DataBits" Content="8" IsChecked="{Binding SerialSetModel.DataBits, Converter ={StaticResource IntToBoolConverter}, ConverterParameter= 8}"></RadioButton>
    <TextBlock Grid.Row="3" Grid.Column="0" Text="停止位:"></TextBlock>
    <RadioButton Grid.Row="3" Grid.Column="1" GroupName="StopBits" Content="1" IsChecked="{Binding SerialSetModel.StopBits, Converter={StaticResource FloatToBoolConverter},ConverterParameter= 1}"></RadioButton>
    <RadioButton Grid.Row="3" Grid.Column="2" GroupName="StopBits" Content="1.5" IsChecked="{Binding SerialSetModel.StopBits, Converter={StaticResource FloatToBoolConverter},ConverterParameter= 1.5}"></RadioButton>
    <RadioButton Grid.Row="3" Grid.Column="3" GroupName="StopBits" Content="2" IsChecked="{Binding SerialSetModel.StopBits, Converter={StaticResource FloatToBoolConverter},ConverterParameter= 2}"></RadioButton>

    //view.cs中的代码

        public class EnumToBoolConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                int data = (int)value;
                string name = parameter.ToString();
                switch (name)
                {
                    case "0":
                        return data == 0;
                    case "1":
                        return data == 1;
                    default:
                        return false;
                }
            }
    
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                return (ProtocolTypeDefine)int.Parse(parameter.ToString());
            }
        }
    
        public class IntToBoolConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                int data = (int)value;
    
                string name = parameter.ToString();
                switch (name)
                {
                    case "6":
                        return data == 6;
                    case "7":
                        return data == 7;
                    case "8":
                        return data == 8;
                    default:
                        return false;
                }
            }
    
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                var data = (bool)value;
                if (data)
                {
                    return System.Convert.ToInt32(parameter);
                }
                return -1;
            }
        }
    
        public class FloatToBoolConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                float data = 0f;
                if (!float.TryParse(value.ToString(), out data))
                {
                    return false;
                }
                string name = parameter.ToString();
                switch (name)
                {
                    case "1":
                        return data == 1;
                    case "1.5":
                        return data == 1.5;
                    case "2":
                        return data == 2;
                    default:
                        return false;
                }
            }
    
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                var data = (bool)value;
                if (data)
                {
                    return System.Convert.ToSingle(parameter);
                }
                return -1;
            }
        }

    //model中代码

        //协议 
        SerialSetModel.ProtocolType = 0;
        //数据位
        SerialSetModel.DataBits = 8;
        //停止位
        SerialSetModel.StopBits = 1;

    在此只贴出重要部分代码,使用时只要按照该原理进行组装即可。

  • 相关阅读:
    ASP.Net WebForm温故知新学习笔记:一、aspx与服务器控件探秘
    ASP.Net WebForm温故知新学习笔记:一、aspx与服务器控件探秘
    路由器原理(一)
    python人工智能——机器学习——机器学习基础
    python人工智能——机器学习——机器学习基础
    python人工智能——机器学习——数据的降维
    python人工智能——机器学习——数据的降维
    python人工智能——机器学习——数据的降维
    Common Subsequence
    Common Subsequence
  • 原文地址:https://www.cnblogs.com/action98/p/3488103.html
Copyright © 2020-2023  润新知