写我想写的,说我想说的

记录软件开发过程中的点点滴滴,所想,所悟。 与新手共勉, 向牛人学习

导航

数据源绑定到DataGrid时,0,1如何转换成男和女?

Posted on 2009-10-31 13:03  梅西  阅读(907)  评论(4)    收藏  举报

在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
    }

 在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>  

有了这两个步骤,转换的功能就可以实现了。

要实现其它的转换,只需要实现IValueConverter接口即可。此处就不一一细说了。

本示例的完成代码:

XAML 

C#