摘要:在WPF中,转换器(Converter)是一种用于在数据绑定过程中转换值的机制。允许你在数据源和目标之间进行自定义的值转换。
什么是转换器
在WPF中,转换器(Converter)是一种用于在数据绑定过程中转换值的机制。允许你在数据源和目标之间进行自定义的值转换。
它有些什么用
触发时机
当控件目标值发生变化立即触发 ( 一般用作于目标控件值以及状态显示效果 )
如何使用
创建一个实体类实现转换器接口
在XAML页面上声明当并且引用目标转换器
绑定以及使用转换器
public class BoolToVisibilityConverter : IValueConverter{ public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return (bool)value ? Visibility.Visible : Visibility.Collapsed; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return (Visibility)value == Visibility.Visible; }}使用转换器
Window.Resources> local:BoolToVisibilityConverter x:Key="BoolToVisibility"/>Window.Resources>Button Visibility="{Binding IsButtonVisible, Converter={StaticResource BoolToVisibility}}"/>IMultiValueConverter创建并使用
创建转换器
public class MultiBindingSumConverter : IMultiValueConverter { public object Convert(object values, Type targetType, object parameter, System.Globalization.CultureInfo culture) { double sum = 0; foreach (var value in values) { if (value is double d) { sum += d; } } return sum.ToString; } public object ConvertBack(object value, Type targetTypes, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException; } }使用转换器
Window.Resources> local:MultiBindingSumConverter x:Key="SumConverter" /> Window.Resources> TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20"> TextBlock.Text> MultiBinding Converter="{StaticResource SumConverter}" Mode="OneWay"> Binding Path="ActualWidth" RelativeSource="{RelativeSource AncestorType=Window}" /> Binding Path="ActualHeight" RelativeSource="{RelativeSource AncestorType=Window}" /> MultiBinding> TextBlock.Text> TextBlock>内置转换器
WPF提供了一些常用的内置转换器,位于System.Windows.Controls和System.Windows.Data命名空间中。如:BooleanToVisibilityConverter、AlternationConverter、MenuScrollingVisibilityConverter
高级用法
通过ConverterParameter传递额外参数
双向绑定转换 :实现ConvertBack方法支持双向绑定
来源:opendotnet
免责声明:本站系转载,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!