2011-01-25 50 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> 
相關問題