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来指定转换器使用的参数。

示例代码:点击下载

WPF中RadioButton绑定数据的正确方法的更多相关文章

  1. Python的list循环遍历中,删除数据的正确方法

    在遍历list,删除符合条件的数据时,总是报异常,代码如下: num_list = [1, 2, 3, 4, 5] print(num_list) for i in range(len(num_lis ...

  2. Web 性能优化: 使用 Webpack 分离数据的正确方法

    摘要: Webpack骚操作. 原文:Web 性能优化: 使用 Webpack 分离数据的正确方法 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 制定向用户提供文件的最佳方式可能是一 ...

  3. C#中遍历各类数据集合的方法总结

    C#中遍历各类数据集合的方法总结: 1.枚举类型 //遍历枚举类型Sample的各个枚举名称 foreach (string sp in Enum.GetNames(typeof(Sample))) ...

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

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

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

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

  6. 封装:WPF中可以绑定的BindPassWord控件

    原文:封装:WPF中可以绑定的BindPassWord控件 一.目的:本身自带的PassWord不支持绑定 二.Xaml部分 <UserControl x:Class="HeBianG ...

  7. JMeter 中对于Json数据的处理方法

    JMeter中对于Json数据的处理方法 http://eclipsesource.com/blogs/2014/06/12/parsing-json-responses-with-jmeter/ J ...

  8. JMeter中返回Json数据的处理方法

    Json 作为一种数据交换格式在网络开发,特别是 Ajax 与 Restful 架构中应用的越来越广泛.而 Apache 的 JMeter 也是较受欢迎的压力测试工具之一,但是它本身没有提供对于 Js ...

  9. 【jmeter】JMeter中返回Json数据的处理方法

    Json 作为一种数据交换格式在网络开发,特别是 Ajax 与 Restful 架构中应用的越来越广泛.而 Apache 的 JMeter 也是较受欢迎的压力测试工具之一,但是它本身没有提供对于 Js ...

随机推荐

  1. 弹出页面遮罩层,以及web端和移动端阻止遮罩层的滑动。

    最近项目遇到了遮罩层的一些问题,总结一下: 弹出遮罩层 遮罩层弹出有非常多的方法,这里只写出本人用的代码,使用jq操作dom的方法进行实现的. <style>.box{position:a ...

  2. SAP中需要记住的一些标准表

    E070 请求号的抬头表 E071 请求号的行项目表 E07T 请求号的文本 E71K TASK的抬头(子请求) ******************************************* ...

  3. Sharepoint学习笔记—习题系列--70-576习题解析 --索引目录

        Sharepoint学习笔记—习题系列--70-576习题解析  为便于查阅,这里整理并列出了70-576习题解析系列的所有问题,有些内容可能会在以后更新. 需要事先申明的是:     1. ...

  4. 自动显示隐藏布局的listView

    借助View的OnTouchListener接口来监听listView的滑动,通过比较与上次坐标的大小,判断滑动方向,并通过滑动方向来判断是否需显示或者隐藏对应的布局,并且带有动画效果. 1.自动显示 ...

  5. Reveal1.5破解,iOS_UI调试利器Reveal最新版本破解方法

    Reveal1.0.7破解 1.官网下载最新版Reveal,拖动应用程序中,运行一次2.下载16进制编辑器"0xED" for mac(http://dl.vmall.com/c0 ...

  6. 【android 开 发 】 - Android studio 下 NDK Jni 开发 简单例子

    Android 开发了一段时间,一方面 ,感觉不留下点什么.有点对不起自己, 另一方面,好记性不如烂笔头,为了往后可以回头来看看,就当做是笔记,便决定开始写博客.废话不多说 ! 今天想搞一搞 ndk ...

  7. 让我们来谈谈JDBC

    1.JDBC     1)JDBC简介         - JDBC就是Java中连接数据库方式         - 我们可以通过JDBC来执行SQL语句.       2)获取数据库连接   - j ...

  8. Oracle创建表空间、创建用户以及授权

    Oracle安装完后,其中有一个缺省的数据库,除了这个缺省的数据库外,我们还可以创建自己的数据库. 为了避免麻烦,可以用’Database Configuration Assistant’向导来创建数 ...

  9. ORA-00824: cannot set sga_target due to existing internal settings, see alert log for more information

    这篇文章是上篇文章”Expdp 导数错误 ORA-00832”的延续,前几天工作比较忙.累,直到今天才整理发出来.这个数据库实例的参数设置比较诡异其实是有原因的,由于这台数据库服务器系统是32位,数据 ...

  10. SQL Server Replication 中关于视图的点滴

    在服务器A数据库TEST新建了一个本地发布(Local Publications)RPL_GES_MIS_TEST,在服务器B数据库RPL_TEST上创建了一个本地订阅(Local Subscript ...