WPF 中转换器 --Converter使用详解(一)
1.前言
WPF转换器的作用:实现源数据和目标数据之间进行特定的转化
转化实现方式:通过实现接口System.Windows.Data名空间的IValueConverter接口进行单值转换、通过实现IMutilValueConverter接口进行多值转换
2.WPF转换器实现: 通过实现IvalueConverter 接口的Convert 方法,将源数据转换为目标数据;若转换模式为TwoWay,则通过实现IValueConverter接口的ConvertBack方法,将目标数据转换为源数据,若转换模式为OneWay,则该方法可不做实现,直接返回null;
IValueConverter接口进行值转换的具体实现:
后端转换类代码,该实例实现子panel的宽度为父panel实际宽度的一半:
1 public class MathConverter: IValueConverter 2 { 3 public object Convert(object value,Type targetType,object parameter,System.Globalization.CultureInfo cultureInfo) 4 { 5 try 6 { 7 if (value != null && parameter != null) 8 return Double.Parse(value.ToString())* Double.Parse(parameter.ToString()); 9 else return 600; 10 } 11 catch (Exception ex) 12 { 13 return 600; 14 } 15 16 } 17 public object ConvertBack(object value, Type targetType,object parameter, System.Globalization.CultureInfo cultureInfo) { 18 throw new NotImplementedException(); 19 } 20 }
前端xaml代码如下:
1 <DockPanel Grid.ColumnSpan="2" Name="mainPanl" LastChildFill="True" Background="#FFF3E8E8"> 2 <DockPanel Grid.Row="0" Name="p1" DockPanel.Dock="Top" Background="Green" Height="30px" ></DockPanel> 3 <DockPanel Grid.Row="0" Grid.Column="0" Name="p2" DockPanel.Dock="Bottom" Background="Red" Height="150" ></DockPanel> 4 <DockPanel Grid.Column="0" Name="p3" DockPanel.Dock="Left" Background="Gray" LastChildFill="False" Width="{Binding ActualWidth, ConverterParameter=0.5, Converter={StaticResource MathConverter}, ElementName=mainPanl, Mode=OneWay, NotifyOnSourceUpdated=True, TargetNullValue=600}" /> 5 <DockPanel Grid.Column="1" Name="p4" LastChildFill="True" Background="Yellow"></DockPanel> 6 </DockPanel>
本示例,主要讲解通过创建转换类,实现IValueConverter接口的Convert方法,前端通过数据绑定转换器的方式,来实现数据的转换,下一篇将详细讲解通过实现IMutilValueConverter接口(文章链接:https://www.cnblogs.com/ramo/p/13488972.html),来进行多值转换。
我的敏捷宣言:快速地创建美的东西,烂代码虽然写得快,但是不容易应对更改,长久会让项目开发成本翻翻,无法维护
Clean Code:一眼读不懂的代码,耦合在一起的代码,重复的代码,要重构。好代码的感觉是意图特别清晰,读起来心旷神怡。及时重构。
Architecture:用什么技术->从0开始把应用程序框架搭起来,牢记面向对象就不会有大差池。记住设计就是:Concept-->Model(建模)。程序就是 Module(Model+架在Model上的API+特定功能的Work flow+UI)的组合。模式的目的是优化设计,享受架构之美。