2009-12-13 39 views
104

請看看下面的行設定值在WPF空結合

<TextBox Text="{Binding Price}"/> 

從上面這個價格屬性是Decimal?(可空十進制)。

我想,如果用戶刪除文本框的內容(即進入空字符串,它應該automatcally更新空(在VB中爲Nothing)。

我如何能做到這一點「Xamly」任何想法來源?

回答

200

我使用.NET 3.5 SP1所以這是非常簡單的:

<TextBox Text="{Binding Price, TargetNullValue=''}"/> 

它代表(感謝格里的評論):

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

sysmscorlibSystem導入XML命名空間:

xmlns:sys="clr-namespace:System;assembly=mscorlib" 

希望有所幫助。

+0

查看我的更新回答 – 2009-12-13 14:55:36

+12

其實TargetNullValue工作得很好。它所做的是在給定值和null之間設置等價。因此,在這種情況下,當綁定值爲空時,它將顯示一個空字符串,並且當目標的值爲空字符串時,它會將綁定值設置爲空。 – 2009-12-13 16:19:41

+4

TargetNullValue有效。使用數值轉換器時我得到了相同的結果。您還可以簡化表達式: 2011-05-10 08:24:18

5

您可以嘗試使用ValueConverter(的IValueConverter) http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx

我的後腦勺這裏,是這樣的:

public class DoubleConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     return (double)value; 
    } 

    public object ConvertBack(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
    var doubleValue = Convert.ToDouble(value); 

    return (doubleValue == 0 ? null : doubleValue); 
    } 
} 

(可能需要儘管一些調整)

+0

我更喜歡Xamly的方式,但我想不出任何 – Shimmy 2009-12-13 03:29:17

11

此值轉換器應該做的伎倆:

public class StringToNullableDecimalConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, 
     CultureInfo culture) 
    { 
     decimal? d = (decimal?)value; 
     if (d.HasValue) 
      return d.Value.ToString(culture); 
     else 
      return String.Empty; 
    } 

    public object ConvertBack(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     string s = (string)value; 
     if (String.IsNullOrEmpty(s)) 
      return null; 
     else 
      return (decimal?)decimal.Parse(s, culture); 
    } 
} 

聲明該轉換器的實例在ressources:

<Window.Resources> 
    <local:StringToNullableDecimalConverter x:Key="nullDecimalConv"/> 
</Window.Resources> 

而且在使用它你綁定:

<TextBox Text="{Binding Price, Converter={StaticResource nullDecimalConv}}"/> 

請注意,TargetNullValue在此不適用:它用於定義在綁定的source爲空時應使用哪個值。這裏Price沒有來源,它的來源的財產......

+1

任何xamly的想法? – Shimmy 2009-12-13 03:32:57

+2

轉換器是正確的方式,您無法在XAML中定義這些轉換器。轉換器允許您在數據綁定中更改默認的「對象到對象」轉換行爲,這正是您想要做的。 – 2009-12-13 03:40:35

+0

在我的情況下,問題是我已經在這裏使用了一個收集器來做另一件事。 我發佈了一個答案,請看看。 – Shimmy 2009-12-13 03:44:38