当界面上出现多组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 "":
return data == ;
case "":
return data == ;
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 "":
return data == ;
case "":
return data == ;
case "":
return data == ;
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 -;
}
} 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 "":
return data == ;
case "1.5":
return data == 1.5;
case "":
return data == ;
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 -;
}
}

//model中代码

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

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

WPF中RadioButton的分组的更多相关文章

  1. WPF中RadioButton绑定数据的正确方法

    RadioButton一般用于单选的时候,也就是从一组值中选择一个值. 比如性别有“男”和“女”两种取值,而对于一个员工的实例来说,性别的取值要么是男,要么是女. 这种时候一般就会用到RadioBut ...

  2. 整理:WPF中XmlDataProvider的用法总结

    原文:整理:WPF中XmlDataProvider的用法总结 一.目的:了解XmlDataProvider中绑定数据的方法 二.绑定方式主要有三种: 1.Xaml资源中内置: <!--XPath ...

  3. MVVM模式解析和在WPF中的实现(五)View和ViewModel的通信

    MVVM模式解析和在WPF中的实现(五) View和ViewModel的通信 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 M ...

  4. WPF入门教程系列十八——WPF中的数据绑定(四)

    六.排序 如果想以特定的方式对数据进行排序,可以绑定到 CollectionViewSource,而不是直接绑定到 ObjectDataProvider.CollectionViewSource 则会 ...

  5. WPF中的动画——(三)时间线(TimeLine)

    WPF中的动画——(三)时间线(TimeLine) 时间线(TimeLine)表示时间段. 它提供的属性可以让控制该时间段的长度.开始时间.重复次数.该时间段内时间进度的快慢等等.在WPF中内置了如下 ...

  6. WPF中的数据绑定!!!

    引用自:https://msdn.microsoft.com/zh-cn/magazine/cc163299.aspx  数据点: WPF 中的数据绑定 数据点 WPF 中的数据绑定 John Pap ...

  7. MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件

    原文  MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件 UI 前沿技术 WPF 中的多点触控操作事件 Charles Petzold 下载代码示例 就在过去几年,多点触控还只是科幻电 ...

  8. WPF,ListView设置分组

    原文:WPF,ListView设置分组 今天遇到一个问题,就是在ListView中设置分组.想了很久在网上早了些资料作出一个例子. 分组字段也可以在后台中定义: CollectionView view ...

  9. WPF中反转3D列表项

    原文:WPF中反转3D列表项 WPF中反转3D列表项                                                         周银辉记得在苹果电脑中有一个很酷的 ...

随机推荐

  1. 用Java实现单链表的基本操作

    笔试题中经常遇到单链表的考题,下面用java总结一下单链表的基本操作,包括添加删除节点,以及链表转置. package mars; //单链表添加,删除节点 public class ListNode ...

  2. POJ-1979 Red and Black(DFS)

    题目链接:http://poj.org/problem?id=1979 深度优先搜索非递归写法 #include <cstdio> #include <stack> using ...

  3. css reset重置样式有那么重要吗?

    在以前写html代码的时候,一般都会在head里添加重置样式reset.css,其内容如下: @charset "utf-8"; html, body, div, span, ap ...

  4. Topcoder SRM 619 DIv2 500 --又是耻辱的一题

    这题明明是一个简单的类似约瑟夫环的问题,但是由于细节问题迟迟不能得到正确结果,结果比赛完几分钟才改对..耻辱. 代码: #include <iostream> #include <c ...

  5. POJ 2318 TOYS【叉积+二分】

    今天开始学习计算几何,百度了两篇文章,与君共勉! 计算几何入门题推荐 计算几何基础知识 题意:有一个盒子,被n块木板分成n+1个区域,每个木板从左到右出现,并且不交叉. 有m个玩具(可以看成点)放在这 ...

  6. AC日记——阶乘之和 洛谷 P1009(高精度)

    题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1. 输入输出格式 输入格式: 一个正整数N. 输出格式: 一个正整数S,表示计算结 ...

  7. Jenkins遇到问题一:jenkins配置权限不对导致无法登陆或者空白页面解决办法

    找到.jenkins/config.xml文件:替换为:1.<authorizationStrategy class="hudson.security.AuthorizationStr ...

  8. 如何修改myeclipse 内存,eclipse.ini中各个参数的作用。

    修改MyEclipse/eclipse文件夹中配置文件eclipse.ini中的内存分配就哦了 =================================== 一般的ini文件设置主要包括以下 ...

  9. jenkins忘记管理员登陆密码的补救措施

    jenkins可以作为我们日常运维过程中代码上线的发版平台,所以对jenkins的安全可靠的维护是十分重要的. 1)在登陆jenkins的时候,如果忘记普通用户的登陆密码,只要能用管理员账号登陆,还可 ...

  10. Css 常用属性

    1. overflow:hidden和zoom:1 verflow:hidden;的作用 1. 隐藏溢出 :2.消除浮动 <style type="text/css"> ...