我们在绑定数据到DataGrid时,考虑一下情况:例如有性别这个字段,我们在数据库以1和0代表男、女,那么我们怎么在绑定到DataGrid时把其改成男、女?有些朋友可能会想到查处数据后直接修改这个数据列表,这种方法可以,但是实现起来很复杂,这里我介绍一个简便的方法,充分利用客户端的运算能力,而不必把这些工作都交给服务端。
这类实现了IValueConverter接口,也就具备了数据转换能力,如果传过来的值为1就返回男,如果不是就返回女,只是这个类还不能实现转换功能,我们看xaml端代码:
代码
///
<summary>
/// 数据转换 /// </summary>
public class docConverter : IValueConverter
{
public object Convert( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value ==1?"男":"女";
}
public object ConvertBack( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
/// 数据转换 /// </summary>
public class docConverter : IValueConverter
{
public object Convert( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value ==1?"男":"女";
}
public object ConvertBack( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value=="男"?1,0;
}
}
}
}
代码
<
sdk:DataGrid x:Name
=
"
dgPatient_records
"
Grid.Row
=
"
2
"
FontSize
=
"
13
"
AutoGenerateColumns
=
"
False
"
SelectionChanged
=
"
dgPatient_records_SelectionChanged
"
>
< sdk:DataGrid.Columns >
< sdk:DataGridTextColumn Header = " 性别 " FontSize = " 12 " Binding = " {Binding sex, Converter={StaticResource sexConvert},Mode=TwoWay} " />
</ sdk:DataGrid.Columns >
</ sdk:DataGrid >
< sdk:DataGrid.Columns >
< sdk:DataGridTextColumn Header = " 性别 " FontSize = " 12 " Binding = " {Binding sex, Converter={StaticResource sexConvert},Mode=TwoWay} " />
</ sdk:DataGrid.Columns >
</ sdk:DataGrid >
我们看到我在DataGrid里定义了一列用来显示性别,用Converter={StaticResource sexConvert},定义了使用哪个转换器,在这里将提示无法找到转换器,接下来我们添加如下代码到app.xaml文件中:
<
Application.Resources
>
< con:docConverter x:Key = " sexConvert " />
</ Application.Resources >
< con:docConverter x:Key = " sexConvert " />
</ Application.Resources >
这样就实现了转换器的定义到调用过程,大家也可以配合LINQ语法实现两个或多个标的数据相互转换,比如表A里有单位ID,在单位表B里有单位名称,现在要求把表A绑定到DataGrid里,我们就要A的单位ID查找B的名称进行转换。