请看下面的一行
<TextBox Text="{Binding Price}"/>
上面的这个Price属性是一个Decimal?
(可为空的十进制)。
我希望如果用户删除文本框的内容(即输入空字符串,则应使用null(在VB中为Nothing)自动更新源。
关于“ Xamly”如何做的任何想法?
请看下面的一行
<TextBox Text="{Binding Price}"/>
上面的这个Price属性是一个Decimal?
(可为空的十进制)。
我希望如果用户删除文本框的内容(即输入空字符串,则应使用null(在VB中为Nothing)自动更新源。
关于“ Xamly”如何做的任何想法?
Answers:
我正在使用.NET 3.5 SP1,因此非常简单:
<TextBox Text="{Binding Price, TargetNullValue=''}"/>
代表(感谢Gregor的评论):
<TextBox Text="{Binding Price, TargetNullValue={x:Static sys:String.Empty}}"/>
sys
对于进口的XML命名空间System
中mscorlib
:
xmlns:sys="clr-namespace:System;assembly=mscorlib"
希望能有所帮助。
Target
而不是更新Source
,但由于某些原因(我不太清楚为什么),此解决方案仍然可以解决问题。
这个值转换器应该可以解决这个问题:
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);
}
}
在资源中声明此转换器的实例:
<Window.Resources>
<local:StringToNullableDecimalConverter x:Key="nullDecimalConv"/>
</Window.Resources>
并在您的绑定中使用它:
<TextBox Text="{Binding Price, Converter={StaticResource nullDecimalConv}}"/>
请注意,这TargetNullValue
在此处不合适:它用于定义当source
绑定的null为空时应使用哪个值。这Price
不是来源,而是来源的属性...
您可以尝试使用ValueConverter(IValueConverter) http://msdn.microsoft.com/zh-cn/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);
}
}
(尽管可能需要一些调整)