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),来进行多值转换。

 

posted @ 2020-08-11 17:11  Ramos6  阅读(3797)  评论(0编辑  收藏  举报