WPF中RadioButton绑定数据的正确方法
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绑定数据的正确方法相关推荐
- python list 删除元素_Python的list循环遍历中,删除数据的正确方法
初学Python,遇到过这样的问题,在遍历list的时候,删除符合条件的数据,可是总是报异常,代码如下: num_list = [1, 2, 3, 4, 5]print(num_list)for i ...
- python list遍历删除_Python中list循环遍历删除数据的正确方法
前言 初学Python,遇到过这样的问题,在遍历list的时候,删除符合条件的数据,可是总是报异常,代码如下: num_list = [1, 2, 3, 4, 5] print(num_list) f ...
- WPF中Binding使用StringFormat格式化字符串方法
原文:WPF中Binding使用StringFormat格式化字符串方法 货币格式 <TextBlock Text="{Binding Price, StringFormat={}{0 ...
- Unity(游戏)中五种数据存储的方法
Unity(游戏)中五种数据存储的方法 一.PlayerPrefs unity3d提供了一个用于本地持久化保存与读取的类-------PlayerPrefs.工作原理很简单,以键值对的形式将数据保存在 ...
- 【.NET】C#中遍历各类数据集合的方法
C#中遍历各类数据集合的方法,这里自己做下总结: 1.枚举类型 // 遍历枚举类型Sample的各个枚举名称 foreach ( string ...
- Python之pandas:pandas中常见的数据类型转换四大方法以及遇到的一些坑之详细攻略
Python之pandas:pandas中常见的数据类型转换四大方法以及遇到的一些坑之详细攻略 目录 pandas中常见的数据类型转换方法 T1.读取时直接转换数据类型 T2.采用astype
- Mybatis中使用大于小于等于的正确方法
在mybatis中sql是写在xml映射文件中的,如果sql中有一些特殊字符的话,在解析xml文件的时候就会被转义,如若不希望被转义,那该怎么办呢? 方法一:使用特殊转义字符 例如,>=开始日期 ...
- ML之ME:Best-KS分箱/KS值(分类预测问题中评价指标、数据分箱方法)的简介(KS与ROC的关系)、使用方法、案例应用之详细攻略
ML之ME:Best-KS分箱/KS值(分类预测问题中评价指标.数据分箱方法)的简介(KS与ROC的关系).使用方法.案例应用之详细攻略 目录 Best-KS分箱/KS值的简介 1.Best-KS分箱 ...
- css如何载入多种字体,在css中包含多种字体的正确方法
我不是一个简单的时刻.哪种方式是在css中包含多种字体的正确方法?这里是简单的例子.在css中包含多种字体的正确方法 This? @font-face { font-family: Delicious ...
最新文章
- GPU—加速数据科学工作流程
- CentOS7搭建Git服务器
- suse redhat 查看系统版本
- RMI原理揭秘之远程方法调用
- 默认参数,命名参数,可变参数
- echo输出换行_Bash shell教程[5] echo命令
- 预编译sql查询语句_频繁的查询重新编译– SQL查询性能的杀手–简介
- 优秀的模糊测试代码是如何炼成的?
- ‘net’ 不是内部命令或外部命令,也不是可运行的程序或批处理文件 解决方法
- 分享40个超棒的CSS3按钮教程
- 诺基亚5800软件测试初学者,诺基亚5800刷机【教程详解】
- echarts取消轴线,网格线
- 知乎上看到一篇有关三门问题比较好的讲解
- Unity开发基础——使用字符串学习笔记
- ps界面为啥突然变大了_photoshop 2020来了,ps进入智能修图时代,新特性太逆天了...
- Codeforces 1037E Trips
- 短视频文案怎么写?优质短视频文案写作技巧
- 梧桐落雨,烟水迷离,莺啼江南岸!
- 从财报、抗疫回望变革:BAT的“基因改造”这些年怎么样了?
- 培训网站比较-CSDN-51CTO-慕课网