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>