我遇到了一个需要解决的问题。当某些事件发生时,我的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 = Default)上刷新,但是有一种情况是TextBox处于错误模式。如果用户输入的值打破了自定义验证规则,或者格式无效(即:在绑定到小数的字段中输入64.5x5),则每个keychange都会触发模型中属性的刷新。并且由于模型刷新可能导致应用StringFormat,这意味着当用户尝试更正TextBox中的无效值时,插入符号将向左移动。这对我们的客户来说是一种恼人的行为,我们真的需要找到解决方法。
我尝试在绑定上使用自定义转换器而不是字符串格式,但这并没有解决问题。由于在代码到达属性Set之前有时会引发异常,因此在插入符号移动之前我无法处理此异常。
Silverlight 5是否提供了解决此问题的方法?
谢谢!
答案 0 :(得分:0)
不确定你是否设置了UpdateSourceTrigger = PropertyChanged,对于textbox这会导致每次按下Key和StringFormat时刷新,为了解决这个问题,它应该设置为“Default”,即LostFocus