2012-11-15 31 views
0

我有一個綁定到某個十進制值的文本框。現在,如果我在其中輸入100個內容並完全清除它(空)。我保存數據並保存爲十進制值1。同樣,如果我嘗試了200並清除文本框,它將保存2.記住十進制值不爲空。有任何想法嗎?用一些十進制值綁定的空文本框

<TextBox 
    Height="23" 
    VerticalAlignment="Center" 
    Text="{Binding Discount,Mode=TwoWay}" 
    MaxLength="50" 
    TabIndex="28" 
    Grid.Row="2" 
    Grid.Column="1" 
    local:FocusExtension.IsFocused= 
     "{Binding Path=IsDiscountFocused,Mode=TwoWay}" 
    Margin="5,0,0,0"/> 
+0

可以請你告訴你的XAML代碼。 – ethicallogics

+0
+0

折扣是十進制屬性,我使用MVVM – lordhusnain

回答

4

由於String.Empty不能轉換爲默認的十進制。最後一個有效值保存在屬性中。 您應該使用如下的轉換器。

WPF

<Window.Resources> 
    <local:ValueConverter x:Key="valueConverter" /> 
</Window.Resources> 

<TextBox Text="{Binding Path=Value, Mode=TwoWay, Converter={StaticResource valueConverter}}" /> 

轉換器:

public class ValueConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value is string && (string)value == "") 
     { 
      return 0; 
     } 

     return value; 
    } 
} 

CLR:

public decimal Value 
{ 
    get { return (decimal)GetValue(ValueProperty); } 
    set { SetValue(ValueProperty, value); } 
} 
+0

謝謝男人,它真的保存我的問題:) – lordhusnain

+0

你歡迎,請標記爲已接受。 – Eric

+0

很棒的回答。確定我的一天! :) –

0

我假設你的視圖模型的折扣財產的樣子:

public decimal Discount {get;set;} 

如果你使用退格鍵和清除文本框你有約束力的例外,因爲「」不能convertet爲十進制。所以最後的號碼仍然在你的財產。實際上這應該發生在使用UpdateSourceTrigger = Propertychanged時。但是你可以嘗試使用十進制嗎?如果這沒有幫助,你也可以添加一個轉換器將「」轉換爲您的視圖模型可以處理的值。

編輯:我沒有看到你最後的評論。但是如果你想要一個空的文本框爲0,只需要在輸入「」時使用轉換器返回0。

+0

清除請你詳細說明這個轉換器。我的意思是適合viewmodel。謝謝 – lordhusnain

+0

我得到了什麼。你想我在折扣財產集{if(value == string.empty)_discount = 0 else _discount = value} – lordhusnain

+0

看到答案從埃裏克他發佈轉換器 – blindmeis

相關問題