RadioButton一般用于单选的时候,也就是从一组值中选择一个值。

比如性别有“男”和“女”两种取值,而对于一个员工的实例来说,性别的取值要么是男,要么是女。

这种时候一般就会用到RadioButton。

RadioButton有一个IsChecked属性用于表示是否选中,IsChecked属性的值类型是bool,只能直接绑定bool类型的值。

然而对于大多数时候来说,这种多选一的值我们一般会采用枚举等类型。比如性别我们会定义如下的枚举:

    public enum Sex{Male,Female}

对于员工类,我们作如下定义:

    public class Employee : ModelBase{private string _name;public string Name{get{return _name;}set{_name = value;RaisePropertyChanged(() => Name);}}private Sex _sex;public Sex Sex{get{return _sex;}set{_sex = value;RaisePropertyChanged(() => Sex);}}}

而要将员工的性别属性绑定到RaidoButton上,我们就需要使用到数据转换器。我们定义一个名为SexToBoolConverter的数据转换器来进行枚举类型Sex和bool类型之间的转换,如下所示:

    public class SexToBoolConverter : IValueConverter{public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture){Sex s = (Sex)value;return s == (Sex)int.Parse(parameter.ToString());}public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture){bool isChecked = (bool)value;if (!isChecked){return null;}return (Sex)int.Parse(parameter.ToString());}

转换器的Convert方法用于从Employee实例到RadioButton时的数据转换,而ConvertBack用于从RaidoButton到Employee实例时的数据转换。

这里需要注意ConvertBack方法中判断value的值为false的时候,会直接返回null。

这样写是为了RadioButton的状态变为未选中的时候,阻止数据传回Employee的实例。这一点非常重要,如果不这样做,值更新会在两个RadioButton之间形成一个环路,导致RadioButton不能正常工作。

关于数据转换器的更多信息,大家可以到MSDN上查看,这里就不详细解释了。

下面看看如何使用我们定义好的数据转换器,请看下面的xaml代码:

xmlns:local="clr-namespace:WpfApplication1.Views"

将上面这句代码添加到要使用转换器的xaml页面的命名空间引用,将其中的WpfApplication1.Views替换为你转换器所在的命名空间,当你的转换器位于另一个程序集的时候,你还需要使用assembly关键字来指定该程序集的名称。

然后我们在页面资源中定义一个该转换器的静态资源,如下所示:

<Window.Resources><local:SexToBoolConverter x:Key="SexToBoolConverter"></local:SexToBoolConverter>
</Window.Resources>

如何在RadioButton上面使用呢?请看下面的代码:

<RadioButton GroupName="Sex" IsChecked="{Binding Model.SelectedEmployee.Sex,Converter={StaticResource SexToBoolConverter},ConverterParameter=0}">男</RadioButton>
<RadioButton GroupName="Sex" IsChecked="{Binding Model.SelectedEmployee.Sex,Converter={StaticResource SexToBoolConverter},ConverterParameter=1}">女</RadioButton>

我们将当前选中员工的Sex属性绑定到RadioButton的IsChecked属性上,并指定绑定时需要使用SexToBoolConverter转换器,使用ConverterParameter来指定转换器使用的参数。

示例代码:点击下载

转载于:https://www.cnblogs.com/action98/p/3495494.html

WPF中RadioButton绑定数据的正确方法相关推荐

  1. python list 删除元素_Python的list循环遍历中,删除数据的正确方法

    初学Python,遇到过这样的问题,在遍历list的时候,删除符合条件的数据,可是总是报异常,代码如下: num_list = [1, 2, 3, 4, 5]print(num_list)for i ...

  2. python list遍历删除_Python中list循环遍历删除数据的正确方法

    前言 初学Python,遇到过这样的问题,在遍历list的时候,删除符合条件的数据,可是总是报异常,代码如下: num_list = [1, 2, 3, 4, 5] print(num_list) f ...

  3. WPF中Binding使用StringFormat格式化字符串方法

    原文:WPF中Binding使用StringFormat格式化字符串方法 货币格式 <TextBlock Text="{Binding Price, StringFormat={}{0 ...

  4. Unity(游戏)中五种数据存储的方法

    Unity(游戏)中五种数据存储的方法 一.PlayerPrefs unity3d提供了一个用于本地持久化保存与读取的类-------PlayerPrefs.工作原理很简单,以键值对的形式将数据保存在 ...

  5. 【.NET】C#中遍历各类数据集合的方法

    C#中遍历各类数据集合的方法,这里自己做下总结: 1.枚举类型              // 遍历枚举类型Sample的各个枚举名称              foreach  ( string   ...

  6. Python之pandas:pandas中常见的数据类型转换四大方法以及遇到的一些坑之详细攻略

    Python之pandas:pandas中常见的数据类型转换四大方法以及遇到的一些坑之详细攻略 目录 pandas中常见的数据类型转换方法 T1.读取时直接转换数据类型 T2.采用astype

  7. Mybatis中使用大于小于等于的正确方法

    在mybatis中sql是写在xml映射文件中的,如果sql中有一些特殊字符的话,在解析xml文件的时候就会被转义,如若不希望被转义,那该怎么办呢? 方法一:使用特殊转义字符 例如,>=开始日期 ...

  8. ML之ME:Best-KS分箱/KS值(分类预测问题中评价指标、数据分箱方法)的简介(KS与ROC的关系)、使用方法、案例应用之详细攻略

    ML之ME:Best-KS分箱/KS值(分类预测问题中评价指标.数据分箱方法)的简介(KS与ROC的关系).使用方法.案例应用之详细攻略 目录 Best-KS分箱/KS值的简介 1.Best-KS分箱 ...

  9. css如何载入多种字体,在css中包含多种字体的正确方法

    我不是一个简单的时刻.哪种方式是在css中包含多种字体的正确方法?这里是简单的例子.在css中包含多种字体的正确方法 This? @font-face { font-family: Delicious ...

最新文章

  1. GPU—加速数据科学工作流程
  2. CentOS7搭建Git服务器
  3. suse redhat 查看系统版本
  4. RMI原理揭秘之远程方法调用
  5. 默认参数,命名参数,可变参数
  6. echo输出换行_Bash shell教程[5] echo命令
  7. 预编译sql查询语句_频繁的查询重新编译– SQL查询性能的杀手–简介
  8. 优秀的模糊测试代码是如何炼成的?
  9. ‘net’ 不是内部命令或外部命令,也不是可运行的程序或批处理文件 解决方法
  10. 分享40个超棒的CSS3按钮教程
  11. 诺基亚5800软件测试初学者,诺基亚5800刷机【教程详解】
  12. echarts取消轴线,网格线
  13. 知乎上看到一篇有关三门问题比较好的讲解
  14. Unity开发基础——使用字符串学习笔记
  15. ps界面为啥突然变大了_photoshop 2020来了,ps进入智能修图时代,新特性太逆天了...
  16. Codeforces 1037E Trips
  17. 短视频文案怎么写?优质短视频文案写作技巧
  18. 梧桐落雨,烟水迷离,莺啼江南岸!
  19. 从财报、抗疫回望变革:BAT的“基因改造”这些年怎么样了?
  20. 培训网站比较-CSDN-51CTO-慕课网

热门文章

  1. spring源码分析之spring注解@Aspect是如何工作的?
  2. Android-Binder(一)
  3. ES6与canvas实现鼠标小球跟随效果
  4. WINDOWS下调用GetTokenInformation的奇怪之处--两次调用
  5. systemd系统服务管理详解
  6. 【并行编程】系统体系结构和组件具体说明
  7. Hadoop1 Centos伪分布式部署
  8. CentOS 6.x 使用安装光盘作为yum源
  9. List Control Utility
  10. 重装windows installer