2

我有一个需要解决的问题。当某些事件发生时,我的 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 是否提供解决此问题的方法?

谢谢!

4

1 回答 1

0

不确定您是否设置了 UpdateSourceTrigger=PropertyChanged,对于文本框,这会导致每次按下键并应用 StringFormat 时刷新,要解决此问题,应将其设置为“默认”,即 LostFocus

http://msdn.microsoft.com/en-us/library/system.windows.data.binding.updatesourcetrigger(v=vs.110).aspx

于 2014-05-05T09:41:31.337 回答