在WPF绑定中将值设置为null

请看下面一行

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

这个价格属性从上面是一个Decimal? (可为空的十进制)。

我希望如果用户删除文本框的内容(即进入空string,它应该自动更新源空(VB中没有)。

关于如何做到“Xamly”的任何想法?

我正在使用.NET 3.5 SP1,所以它非常简单:

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

代表(感谢格雷戈尔的评论):

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

sysmscorlib System的导入xml名称空间:

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

希望有所帮助。

这个值转换器应该做的伎俩:

 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不是来源,它是来源的财产…

你可以尝试使用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); } } 

(虽然可能需要一些调整)