2010-01-14 62 views
6

我很難在可空數據庫字段上將空文本框設置爲null。清除文本框不會將綁定設置爲空

XAML

<y:TextBox Text="{Binding Year1Cost, Mode=TwoWay, 
    UpdateSourceTrigger=PropertyChanged, 
    NotifyOnValidationError=True, 
    ValidatesOnDataErrors=True, 
    ValidatesOnExceptions=True, 
    StringFormat=\{0:c\}}" Grid.Row="3" Grid.Column="1" /> 

當我輸入任何值到它的結合是很好,所輸入的值傳遞
當我離開一個空值獨自一空傳遞
如果我刪除值文本框傳遞的值是文本框的原始值,並沒有通知UI的變化Grrrrrrrrrrrrrrrr

我花了很長時間檢查選項 沒有把代碼放在每個可爲空的字段的OnTextChanged我無法看到這樣做的效率。

在此先感謝:

ps。已經看過TargetNullValue沒有成功

的Visual Studio 2008 - SP1 - NET 3.5的

回答

3

考慮使用value converter。您應該能夠實現ConvertBack方法來將空字符串轉換爲空值。

+0

不得不轉換爲空間,爲空字符串由於某種原因沒有觸發屬性更改事件。感謝您的幫助,我會在所有需要的地方執行。 – Traci 2010-01-15 03:24:00

14

設置該屬性綁定到String.EmptyTargetNullValue

<TextBox Text="{Binding TargetNullValue={x:Static sys:String.Empty}}"/> 

我嘗試過了,它爲我工作。

如果我沒看錯的(請原諒我,如果我),你應該設置該屬性的StringFormat這樣的:

StringFormat={}{0:C} 

這是你得到了異常,甚至可能就是這個道理。

+0

xmlns:sys =「clr-namespace:System; assembly = mscorlib」我試過這個,但一直收到Error 24無法從程序集'Microsoft.Windows.Design.Extensibility中加載'Microsoft.Windows.Design.Metadata.ProvideMetadataAttribute'類型,版本= 3.5.0.0,文化=中立,PublicKeyToken = b03f5f7f11d50a3a'。線'1'位置'6680'。 – Traci 2010-01-14 07:46:21

+0

我不知道。 但是如果我是你的話,我會嘗試一個沒有其他定義的TextBox的測試;只是綁定和TargetNullValue。 這種方式可以幫助您找到異常的來源。 – Shimmy 2010-01-14 11:25:08

+0

試圖一起刪除StringFormat,我仍然得到相同的消息。 --- ----這就是我所有的,仍然得到以上例外 – Traci 2010-01-15 01:19:17

3

對我來說,只有轉換器的工作原理: 這裏的a link

public class NullableConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return value == null ? string.Empty : String.Format(culture, "{0}", value); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return string.IsNullOrEmpty(String.Format(culture, "{0}", value)) ? null : value; 
    } 
}