我有一个需要解决的问题。当某些事件发生时,我的 TextBox 的插入符号位置会重置为第一个字符。这是我的 TextBox 的 XAML,我的应用程序正在使用 MVVM:
<TextBox x:Name="txtAmount" Text="{Binding CurrentClientObject.Amount, Mode=TwoWay, StringFormat='###,###,##0.00'}"></TextBox>
绑定到模型属性:
private System.Nullable<decimal> _Amount;
[Display(ResourceType = typeof(MatchModelResx), Name = "LabelAmount", Description = "ToolTipAmount")]
public System.Nullable<decimal> Amount
{
get
{
return _Amount;
}
set
{
_Amount = value;
NotifyChanged("Amount");
}
}
StringFormat 在这里引起了问题,因为每当我在 TextBox 中输入的字符串触发模型中属性的刷新时,都会应用 StringFormat 并且 TextBox 内的插入符号会移动
现在这不成问题了,因为模型在 lostfocus 上刷新(UpdateSourceTrigger = 默认),但有时 TextBox 处于错误模式。如果用户输入的值违反了自定义验证规则,或者格式无效(即:在绑定到小数的字段中输入 64.5x5),则每次 keychange 都会触发模型中属性的刷新。由于模型刷新可能会导致应用 StringFormat,这意味着当用户尝试更正 TextBox 中的无效值时,插入符号将向左移动。这对我们的客户来说是一种恼人的行为,我们真的需要找到解决方法。
我尝试在绑定上使用自定义转换器而不是字符串格式,但这并不能解决问题。而且由于有时会在代码到达属性 Set 之前引发异常,因此在插入符号移动之前我无法处理此问题。
Silverlight 5 是否提供解决此问题的方法?
谢谢!