7

Floatデータ型とUpdateSourceTriggerin に面白い問題があります。floatWPFデータ型のプロパティがあり、それをとBinding のTextBoxセットにバインドしていますが、「.」と入力することはできません。に変更 しない限り、 「。」と入力できないためだと思います。float 値の最後に「.」と入力する必要があるため、修正方法がわかりません。に設定します。UpdateSourceTriggerPropertyChangedWPFTextBoxUpdateSourceTriggerLostFocusUpdateSourceTriggerPropertyChanged

プロパティは次のとおりです。

  public float? Amount
    {
        get;set;
    }

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

    <TextBox
        Text="{Binding Amount , UpdateSourceTrigger=PropertyChanged}"/>
4

4 に答える 4

3

バインディングに StringFormat ステートメントを追加すると役立つ場合があります。

<TextBox
    Text="{Binding Amount, StringFormat='{}{##.##}', UpdateSourceTrigger=PropertyChanged}"/>    

更新:最初の回答でバインディングエラーがスローされることがわかりました..

別のオプションは、コンバーターを使用することです (動作しますが、少し汚れています ;-) ):

...
<Window.Resources>        
    <local:FloatConverter x:Key="FloatConverter" />
</Window.Resources>
...
<TextBox Text="{Binding Amount, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource FloatConverter}}"></TextBox>

コンバータ:

public class FloatConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  {
     return value;
  }

  public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  {
     // return an invalid value in case of the value ends with a point
     return value.ToString().EndsWith(".") ? "." : value;
  }

}

于 2013-06-17T08:00:04.650 に答える
0

バインディングに StringFormat 定義を追加してみてください。そのようです:

<TextBox Name="txtPower" Height="23" 
TextWrapping="Wrap" Text="{Binding Path=Power, Mode=TwoWay, 
UpdateSourceTrigger=PropertyChanged,StringFormat=N2}"></TextBox>
于 2013-06-17T11:49:38.443 に答える