博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF中RadioButton绑定数据的正确方法
阅读量:6324 次
发布时间:2019-06-22

本文共 2325 字,大约阅读时间需要 7 分钟。

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关键字来指定该程序集的名称。

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

 

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

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

 

示例代码:

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

你可能感兴趣的文章
机器学习资料大汇总
查看>>
Python selenium 滚动条 详解
查看>>
微信程序开发
查看>>
如何退出minicom【学习笔记】
查看>>
Sqlserver 数据库基本查询
查看>>
图书馆维护系统总结
查看>>
[hadoop源码阅读][5]-counter的使用和默认counter的含义
查看>>
SAP HUM 如何对一个HU做上架?
查看>>
LINUX系统中动态链接库的创建与使用{补充}
查看>>
三维视觉国际会议首度在中国举办
查看>>
达索系统入手XFlow开发商 强化3DEXPERIENCE平台的仿真能力
查看>>
自动化运维工具之ansible
查看>>
memcached的安装
查看>>
freebsd系统安装
查看>>
我的友情链接
查看>>
Linux LTP 测试框架
查看>>
log4j 每次运行生成文件
查看>>
“经常加班”有误区
查看>>
jquery各种事件触发实例
查看>>
我的友情链接
查看>>