DataContext属性绑定到TextBox.Text没有';t在清除TextBox时更新
本文关键字:TextBox 清除 更新 绑定 属性 Text 没有 DataContext | 更新日期: 2023-09-27 18:28:01
在我的SilverLight
应用程序中,我有一个绑定到DataContext
的nullable decimal
的TextBox.Text
。例如,当我将TextBox
的值从25更改为6时,它起作用,会执行DataContext
上的属性setter并更新后备字段,但当我手动清除TextBox
时,它不起作用,不会调用setter。
[DataMember]
public decimal? Order
{
get { return order; }
set { order = value; }
}
decimal? order;
xaml片段:
<Input:PraTextBox
Text="{Binding Path=Order, Mode=TwoWay}"
IsEnabled="{Binding Path=IsDefaultVisibleEnabled, Mode=TwoWay}"/>
一个普通的TextBox
默认情况下只更新LostFocus
上的绑定源。我不知道你的PraTextBox
是干什么的。但我建议您检查它是在LostFocus
还是在PropertyChanged
上更新源。
尝试在绑定中指定UpdateSourceTrigger:
Text="{Binding Path=Order, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
下一次尝试:使用转换器:
public class NullableDecimalConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture) { return value; }
public object ConvertBack(object value, Type targetType, object parameter,
CultureInfo culture)
{
string decimalString = value as string;
decimal parsedDecimal;
if (decimalString != null && Decimal.TryParse( decimalString,
out parsedDecimal ))
return parsedDecimal;
else
return null;
}
}
绑定:
Text="{Binding Path=Order, Mode=TwoWay,
Converter={StaticResource myNullableDecimalConverter}}"
显然Silverlight(据我所知,还有WPF)将空的TextBox视为空字符串,而不是null。。此外,他们认为空字符串转换为数字是不确定的,因此,如果将数字绑定到文本框,一旦将值设置为数字,就无法再清除它。
PropertyChanged不会因为数字没有改变而触发-获取调试器并亲自查看。
在Silverlight 5中,您可以使用以下内容:
<TextBox Text="{Binding SOMEFIELD, Mode=TwoWay, TargetNullValue=''}"
其中SOMEFIELD是Nullable或其他数字。。