zoukankan      html  css  js  c++  java
  • 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;

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

  • 相关阅读:
    CTO干点啥?
    [转] 持续集成与持续交付备忘录
    [转]概率基础和R语言
    程序自信
    [转]Neural Networks, Manifolds, and Topology
    ubuntu14 + nginx + php
    [转]http://makefiletutorial.com/
    REDIS key notification
    GO RPC
    xpcall 安全调用
  • 原文地址:https://www.cnblogs.com/action98/p/3488103.html
Copyright © 2011-2022 走看看