WPF 数据转换器 IValueConverter例子
WPF C# XAML 前端属性转换 IValueConverter
WPF的数据源绑定方式很方便,只需要在页面绑定好对应的属性即可完成数据的展现。但当需要对数据进行转换的时候 直接使用原有数据源就不行了,
打个比方:
我有个习惯,在设计数据库表时 会把代表bool 属性的字段设置为 SMLLINT 类型 (至于为什么这么设计 。。。) 这样在绑定数据源时 该属性输出也就是int16的,这个在后端处理没什么问题,但是展现使用 CheckBok 一类的控件进行展现,此类控件绑定值是bool类型 这时候原有值自然是会报错的,为这一个字段特意创建一个实体模型进行转换 又不够优雅,这时候就可以使用 IValueConverter 来进行处理
先定义一个转换器类 代码如下
//启用状态 short 转 bool
[ValueConversion(typeof(short?), typeof(short?))]
public class EnabledStatusConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
if (value is null|| (short)value == 0)
{
return false;
}
else
{
return true;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if ((bool)value == true)
{
return 1;
}
else
{
return null;
}
}
}
前端xaml页面使用例子
//先引用命名空间
xmlns:uc="clr-namespace:IDataConverter"
如下图
<ListView ItemsSource="{Binding}">
<ListView.Resources>
<uc:EnabledStatusConverter x:Key="EnabledStatusConverter" />
</ListView.Resources>
<ListView.View>
<GridView>
<GridViewColumn Header="启用状态">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox ToolTip="启用状态"
IsChecked="{Binding Path=EnabledStatus,
Converter={StaticResource EnabledStatusConverter}}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>