wpf之数据类型转换
前言
wpf中经常有这种需求,比如内存中存在一个Bool类型的变量,界面有个控件的背景色由内存中bool变量来控制,当变量为true时,界面为绿色;当变量为false时,界面为空色,这时直接使用数据绑定是不可行的,比如将界面控件的background属性和内存中的bool变量直接绑定这是不行的,所以需要数据转换作为桥梁。
1、数据转换实现
主要是通过实现IValueConverter接口来实现,该接口中存在Convert和ConvertBack两个方法
public class BoolToColorConverter : IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value is bool){SolidColorBrush bgBrush = ((bool)value) ? new SolidColorBrush((Color)ColorConverter.ConvertFromString("GREEN")) : new SolidColorBrush((Color)ColorConverter.ConvertFromString("RED"));return bgBrush;}else{return new SolidColorBrush((Color)ColorConverter.ConvertFromString("RED"));}}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){if (value is SolidColorBrush){SolidColorBrush brush = value as SolidColorBrush;if(brush.Color ==Colors.Green ){return true;}else{return false;}}else{return null;}}}
然后通过下面的代码将这个类转变为可通过key引用的资源。
<Window.Resources><local:BoolToColorConverter x:Key="BoolToColor"/></Window.Resources>
最后看下面的代码中Button的Background属性和CheckBox 的IsChecked属性绑定,Converter={StaticResource BoolToColor}指定使用什么转换。
<Window x:Class="wpf之转换器.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:wpf之转换器"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Window.Resources><local:BoolToColorConverter x:Key="BoolToColor"/></Window.Resources><Grid><StackPanel Orientation="Vertical" ><CheckBox Height="50" x:Name="check_test" /><Button Height=" 100" Background="{Binding IsChecked,ElementName=check_test ,Converter={StaticResource BoolToColor}}" /></StackPanel ></Grid>
</Window>
1)当你选中CheckBox时,Button背景色变为绿色

2)当你取消选中CheckBox时,Button背景色变为红色

选中或者取消选中实际上调用的是Convert方法,将bool类型转为为颜色。
马工撰写的年入30万+C#上位机项目实战必备教程(点击下方链接即可访问文章目录)
1、《C#串口通信从入门到精通》
2、《C#与PLC通信从入门到精通 》
3、《C# Modbus通信从入门到精通》
4、《C#Socket通信从入门到精通 》
5、《C# MES通信从入门到精通》
6、《winform控件从入门到精通》
7、《C#操作MySql数据库从入门到精通》
