2011-11-18 4 views
6

私はTextプロパティのバインディングを使用してWPFのTextBoxを使用しています。TextBoxのStringFormatでダブルにバインドする

私のXAMLは、次のようになります。

<TextBox Text="{Binding Path=MyDoubleValue, StringFormat=N2, UpdateSourceTrigger=PropertyChanged}" /> 

私はのPropertyChangedとタイプ値12345にUpdateSourceTrigger切り替えると残念ながら、私は12,354.00EDIT:4の前に5に気づく)を取得します。これは、.NETフォーマッタによって23の間に,を追加した後、同じ場所にカーソルを置いた結果です。

UpdateSourceTriggerをPropertyChangedに設定してStringFormatを使用するにはどうすればよいですか?

注:これは通常、あなたがこの検証をトリガーするために結合TextBox.TextPropertyChangedことと通知にキーが押されるたびに変更するUpdateSourceTriggerをしたくない

+1

12,345.00はStrngFormat N2を使用するときに期待されるものではありませんか?あなたは何を期待していますか? – Jens

+0

はい、正確には、代わりに私は12,354.00を持っています。 – baalazamon

+0

フォーマット文字列で数字が切り替わるようなことはありません。何か別のものがあるはずです。 –

答えて

8

.NET 4に起こっています。

ユーザーがEnterキーを押すとsaveコマンドを処理する前に値を保存し、PreviewKeyDownイベントにフックし、キーが押された場合は手動でソースを更新するようにしてください通常、私はこのAttachedProperty)

private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Enter) 
    { 
     var obj = sender as UIElement; 
     BindingExpression textBinding = BindingOperations.GetBindingExpression(
      obj, TextBox.TextProperty); 

     if (textBinding != null) 
      textBinding.UpdateSource(); 
    } 
} 

しかし、それとの

あなたはまだ UpdateSourceTrigger=PropertyChangedを使用したい場合は、その値を表示するときの書式を使用することを検討しますが、ユーザーがそれを編集している間、それを削除し、言われているします。

<TextBox> 
    <TextBox.Style> 
     <Style TargetType="{x:Type TextBox}"> 
      <Setter Property="Text" Value="{Binding Path=MyDoubleValue, StringFormat=N2}" /> 
      <Style.Triggers> 
       <Trigger Property="IsFocused" Value="True"> 
        <Setter Property="Text" Value="{Binding Path=MyDoubleValue, UpdateSourceTrigger=PropertyChanged}" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </TextBox.Style> 
</TextBox> 
+0

どのようにコンバーターと似たようなものを実現するか考えていますか?完璧な解決策は、コントロールがフォーカスされていない場合にのみフォーマットを実行するコンバータを持つことです。 – baalazamon

+0

@baalazamonコントロール 'IsFocused'の場合は、 'value.ToString(converterParameter)'を返すStringFormatマルチコンバータを作成できます。この場合、DataTriggersは良い方法だと思う – Rachel

+4

なんらかの理由で、このソリューションを使用して、空の 'TextBox'に「2.5」と入力すると「25」が表示されます。小数は表示されません。私がカーソルをもっと右以外のところに移動すると、小数点以下を入力することができます。 – epalm

関連する問題