请看下面这行
<TextBox Text="{Binding Price}"/>
上面的这个Price属性是Decimal?(可为空的十进制)。我希望如果用户删除文本框的内容(即输入一个空字符串),它应该自动更新数据源(绑定的目标)与空(无VB)。有什么想法我可以在XAML中做到这一点?
Decimal?
aiqt4smr1#
我使用的是.NET 3.5 SP1,所以很简单:
<TextBox Text="{Binding Price, TargetNullValue=''}"/>
这代表(感谢Gregor的评论):
<TextBox Text="{Binding Price, TargetNullValue={x:Static sys:String.Empty}}"/>
sys是mscorlib中System导入的xml命名空间:
sys
mscorlib
System
xmlns:sys="clr-namespace:System;assembly=mscorlib"
希望能有所帮助。
ycggw6v22#
这个值转换器应该可以做到这一点:
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); } }
在resources中声明此转换器的示例:
<Window.Resources> <local:StringToNullableDecimalConverter x:Key="nullDecimalConv"/> </Window.Resources>
并在绑定中使用它:
<TextBox Text="{Binding Price, Converter={StaticResource nullDecimalConv}}"/>
请注意,TargetNullValue在这里不合适:它用于定义当绑定的source为null时应该使用哪个值。这里Price不是源,它是源的一个属性...
TargetNullValue
source
Price
bfrts1fy3#
您可以尝试使用值转换器(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); } }
(可能需要一些调整虽然)
3条答案
按热度按时间aiqt4smr1#
我使用的是.NET 3.5 SP1,所以很简单:
这代表(感谢Gregor的评论):
sys
是mscorlib
中System
导入的xml命名空间:希望能有所帮助。
ycggw6v22#
这个值转换器应该可以做到这一点:
在resources中声明此转换器的示例:
并在绑定中使用它:
请注意,
TargetNullValue
在这里不合适:它用于定义当绑定的source
为null时应该使用哪个值。这里Price
不是源,它是源的一个属性...bfrts1fy3#
您可以尝试使用值转换器(IValueConverter)http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx
在我的后脑勺,像这样:
(可能需要一些调整虽然)