2011-01-25 48 views
3

在保存具有所有更改的集合时,如何确保空白字符串应该为NULL?我正在使用linq,wpf,wcf。存储NULL而不是空白字符串列

我不想迭代每条记录和记录的每个属性,如果空白,则为null。

回答

1

您可以在您的WCF DataContract中实现[OnSerializing]事件来检查String.Empty并将其更改为null。 EG:

[DataContract] 
class MyDataStructure 
{ 
    [DataMember] 
    string Foo { get; set; } 

    [OnSerializing] 
    void OnSerializing(StreamingContext context) 
    { 
     if (Foo == String.Empty) 
      Foo = null; 
    } 
} 

如果你有很多字符串属性的,不希望编写代码来测试每一个,你总是可以通过类的属性,使用反射来循环。

2

可以使用的IValueConverter类像下面::下面的代码是双层,可以激发的行为对其他类型

public class DoubleNullFromStringConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value is double || value is double?) return value; 
     return null; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value == null) 
      return null; 

     var strValue = value as string; 
     if (strValue == null || strValue.Trim().Length == 0) 
      return null; //allow empty strings and whitespaces 

     double doubleValue = 0; 
     if (double.TryParse(strValue, out doubleValue)) 
      return doubleValue; 

     return value; //which will intenionally throw an error 
    } 
} 

然后绑定这对你的控制像下面

<TextBox HorizontalAlignment="Left" Name="brokeragePaidText" VerticalAlignment="Top" Width="170" > 
     <TextBox.Text> 
      <Binding Source="{StaticResource insertTransaction}" Converter="{StaticResource DoubleNullFromStringConverter}" UpdateSourceTrigger="Explicit" Path="BrokeragePaid"> 
       <Binding.ValidationRules> 
        <ExceptionValidationRule/> 
       </Binding.ValidationRules> 
      </Binding> 
     </TextBox.Text> 
    </TextBox> 
相关问题