博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据绑定(十)Binding的数据转换
阅读量:6681 次
发布时间:2019-06-25

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

原文:

当Source端Path所关联的数据与Target端目标属性数据类型不一致时,需要添加数据转换器,数据转换器是一个自定义的类,这个类需要实现IValueConverter接口,这个接口有两个方法需要实现:Convert和ConvertBack,当数据从Source流向Target时,将调用Convert方法,反之,将调用ConvertBack方法

例子,首先定义飞机类型

public enum Category    {        Bomber,        Fighter    }    public enum State    {        Available,        Locked,        Unknown    }    public class Plane    {        public Category Category { get; set; }        public string Name { get; set; }        public State State { get; set; }    }
Plane类型的Category将在界面上转换为图片,而State类型将会转换成界面上的CheckBox显示,由于存在两个转换,因此需要提供两个Converter,第一个转换是做Category类型与字符类型的转换,字符串是图片的路径

class CategoryToSourceConverter : IValueConverter    {        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)        {            Category c = (Category)value;            switch (c)            {                case Category.Bomber:                    {                        return @"\Icons\close.png";                    }                case Category.Fighter:                    {                        return @"\Icons\closeing.png";                    }                default:                    {                        return null;                    }            }        }        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)        {            return new NotImplementedException();        }    }
由于UI上不能修改图片,所以只实现了从Source到Target的转换

另一个转换用于将State数据转换为bool?

public class StateToNullableBoolConverter : IValueConverter    {        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)        {            State s = (State)value;            switch (s)            {                case State.Locked:                    {                        return false;                    }                case State.Available:                    {                        return true;                    }                case State.Unknown:                default:                    {                        return null;                    }            }        }        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)        {            bool? nb = (bool?)value;            switch (nb)            {                case true:                    {                        return State.Available;                    }                case false:                    {                        return State.Locked;                    }                case null:                default:                    {                        return State.Unknown;                    }            }        }    }
界面代码:

加粗的部分是XAML中对转换器的使用,后台代码中实现了Load和Save两个按钮的点击事件

private void buttonLoad_Click(object sender, RoutedEventArgs e)        {            List
planeList = new List
() { new Plane(){Category=Category.Bomber, Name="B-1", State=State.Unknown}, new Plane(){Category=Category.Bomber, Name="B-2", State=State.Unknown}, new Plane(){Category=Category.Fighter, Name="F-22", State=State.Unknown}, new Plane(){Category=Category.Fighter, Name="Su-47", State=State.Unknown}, new Plane(){Category=Category.Bomber, Name="B-52", State=State.Unknown}, new Plane(){Category=Category.Fighter, Name="J-10", State=State.Unknown} }; listBoxPlane.ItemsSource = planeList; } private void buttonSave_Click(object sender, RoutedEventArgs e) { StringBuilder sb = new StringBuilder(); foreach (Plane p in listBoxPlane.Items) { sb.AppendLine(string.Format("Category={0}, Name={1}, State={2}", p.Category, p.Name, p.State)); } File.WriteAllText(@"d:\PlaneList.txt", sb.ToString()); }

界面效果如图:

当改变checkbox的选中状态时,Plane对象中的值会发生变化

转载地址:http://dxiao.baihongyu.com/

你可能感兴趣的文章
工作5年半了,最近准备做一些工作的小结了
查看>>
zabbix监控tengine upstream状态
查看>>
mysql-binlog日志恢复数据库
查看>>
python之使用单元测试框架unittest执行自动化测试
查看>>
day10-多进程的基本语法
查看>>
凡客和锤子
查看>>
设计模式(5)--单例模式
查看>>
VS2015 RTM与ASP.NET 5 RC1之坑
查看>>
pitch yaw roll是什么
查看>>
python生成器 Generator
查看>>
Daily scrum[2013.12.09]
查看>>
深浅copy
查看>>
网络osi
查看>>
WINREG.H 编译出错
查看>>
Detours的使用准备
查看>>
xfs 文件系统损坏修复 fscheck
查看>>
Hibernate之一级缓存
查看>>
Python基础之定义有默认参数的函数
查看>>
443. String Compression - Easy
查看>>
Unity中那些事半功倍的好插件
查看>>