2012-05-02 49 views
2

我遇到需要解決的問題。當某些事件發生時,我的文本框的插入位置重置爲第一個字符。下面是我的文本框的XAML,我的應用程序使用MVVM:StringFormat,TextBox驗證和插入位置

<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中的無效值時移動到左側。這對我們的客戶來說是一種惱人的行爲,我們真的需要找到解決辦法。

我試過使用自定義轉換器綁定而不是stringformat,但是這不是解決問題。由於在代碼到達屬性Set之前有時會引發異常,所以在插入符號移動之前我無法處理這個問題。

Silverlight 5提供了一種解決此問題的方法嗎?

謝謝!

回答