2012-05-02 21 views
2

私は回避する必要がある問題があります。特定のイベントが発生すると、TextBoxのキャレット位置が最初の文字にリセットされます。ここに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は、テキストボックスでいつでも文字列のI入力するので、ここでの問題を引き起こしていますモデルのプロパティのリフレッシュをトリガーし、StringFormatが適用され、TextBox内のキャレットが移動します

モデルはlostfocus(UpdateSourceTrigger = Default)でリフレッシュされるため、これは問題にはなりませんが、テキストボックスがエラーモードです。ユーザーがカスタム検証ルールを破棄するか、無効な形式(小数点にバインドされたフィールドに64.5x5を入力する)の値を入力すると、すべての単一キー交換によってモデル内のプロパティの更新がトリガーされます。モデルのリフレッシュによってStringFormatが適用される可能性があるため、ユーザーがTextBoxで無効な値を修正しようとしているときに、キャレットが左に移動することを意味します。これは私たちの顧客のための刺激的な行動であり、我々は本当にそれを回避する方法を見つける必要があります。

私は文字列形式の代わりにバインディングでカスタムコンバータを使用しようとしましたが、それは問題を修正していません。また、コードがプロパティSetに到達する前に例外が発生することがあるため、キャレットが移動する前にこれを処理する方法がありません。

Silverlight 5ではこれを回避する方法がありますか?

ありがとうございます!

答えて

関連する問題