在datagrid中显示员工列表,遇到用0,1表示性别的字段,如何将它们显示为男和女呢?在ASP.NET中我们可以使用<%#Convert.Int32(Eval("SEX"))==1?"男":"女"%> 来实现转换。但是在Silverlight中这样的方法已经不适用了,那么我们该怎么办呢?
需要自定义一个类,来实现IValueConverter接口。这个接口公开了两个方法:
1.Convert 在将源数据传递到目标以在 UI 中显示之前,对源数据进行修改。
2.ConvertBack 在将目标数据传递到源对象之前,对目标数据进行修改。
如果是OneWay绑定只要实现此方法1即可。 如果是TwoWay则需要实现方法2.
看下面的代码:
public class SexConverter : IValueConverter
{
#region IValueConverter Members
//将0,1转换成女,男
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string result = string.Empty;
int i = Int32.Parse(value.ToString());
if (i == 0)
{
result = "女";
}
else if (i == 1)
{
result = "男";
}
else
result = "未定义";
return result;
}
//将女,男转换成0,1
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int result = -1;
string s = value.ToString();
if (s == "男") result = 1;
else if (s == "女") result = 0;
else result = -1;
return result;
}
#endregion
}
#region IValueConverter Members
//将0,1转换成女,男
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string result = string.Empty;
int i = Int32.Parse(value.ToString());
if (i == 0)
{
result = "女";
}
else if (i == 1)
{
result = "男";
}
else
result = "未定义";
return result;
}
//将女,男转换成0,1
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int result = -1;
string s = value.ToString();
if (s == "男") result = 1;
else if (s == "女") result = 0;
else result = -1;
return result;
}
#endregion
}
在xaml中编辑datagrid控件
<data:DataGrid x:Name="datagrid1" Margin="60,112,0,0" AutoGenerateColumns="False">
<data:DataGrid.Columns>
<data:DataGridTextColumn Binding="{Binding Sex,Mode=TwoWay, Converter={StaticResource myConverter}}" Header="Sex"></data:DataGridTextColumn>
</data:DataGrid.Columns>
<data:DataGrid.Columns>
<data:DataGridTextColumn Binding="{Binding Sex,Mode=TwoWay, Converter={StaticResource myConverter}}" Header="Sex"></data:DataGridTextColumn>
</data:DataGrid.Columns>
</data:DataGrid>
有了这两个步骤,转换的功能就可以实现了。
要实现其它的转换,只需要实现IValueConverter接口即可。此处就不一一细说了。
本示例的完成代码:
XAML
C#
原创贴,自娱自乐的同时,也为大家带来帮助 。
浙公网安备 33010602011771号