c# – 用户无法输入’.’在文本框中已绑定到浮点值,而UpdateSourceTrigger是WPF中的PropertyChanged

我在
WPF中有一个Float数据类型和UpdateSourceTrigger的滑稽问题.我有一个属性为float数据类型并将其绑定到TextBox并将Binding的UpdateSourceTrigger设置为PropertyChanged,但WPF不允许我输入’.’在TextBox中,除非我将UpdateSourceTrigger更改为LostFocus.我认为这是因为我们无法输入’.’在浮动值的最后.我不知道如何解决它,因为我需要输入’.’并将UpdateSourceTrigger设置为PropertyChanged.

该物业是:

  public float? Amount
    {
        get;set;
    }

而在XAML中:

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

最佳答案 如果在绑定中添加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;
  }

}

点赞