错误输入后文本框清除有效值 - WPF

萨比亚萨奇·穆克吉

所以,我有一个包含文本框和标签的简单视图。

<TextBox x:Name="MyIntTextBox" Text="{Binding MyInt, UpdateSourceTrigger=LostFocus, Mode=TwoWay, StringFormat={}{D2}}"/>        
<Label Content="{Binding MyStr2}"/>

在 中ViewModel,我有:

private decimal myInt;

public decimal MyInt
{
    get { return myInt; }
    set
    {
        if (value == myInt) { return; }
        myInt = value;               
        OnPropertyChange();
        OnPropertyChange("MyStr2");
    }
}

public string MyStr2
{
    get
    {
        return myInt.ToString("N2", CultureInfo.CreateSpecificCulture("en-IN"));
    }

}

简单地说,TextBox Text绑定到一个decimal值,并且Label应该textbox以正确的格式显示该值

因为我有LostFocus我的UpdateSourceTriggerTextBox,我按下TAB为了使validationbinding工作。

所以当我输入一个decimal值时,一切正常。Label正确显示格式的数字。

正常工作

当我输入一些垃圾非十进制值时,TextBox Border变为红色表示验证错误。

错误

但是,当我在此之后输入一些有效值时,就像这样……

有效输入

...然后专注于TextBox, 砰!TextBox一片空白。

空白文本框

Label然而,指示正确的值。我在 中设置了断点ViewModel,我可以看到MyInt确实具有正确的值,在本例中为 600,但TextBox不显示它。

我的Output窗口中也出现以下错误

System.Windows.Data Error: 6 : 'StringFormat' converter failed to convert value '600' (type 'Decimal'); fallback value will be used, if available. BindingExpression:Path=MyInt; DataItem='ViewModel' (HashCode=37975124); target element is 'TextBox' (Name='MyIntTextBox'); target property is 'Text' (type 'String') FormatException:'System.FormatException: Input string was not in a correct format.
   at System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args)
   at System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args)
   at System.String.Format(IFormatProvider provider, String format, Object[] args)
   at System.Windows.Data.BindingExpression.ConvertHelper(IValueConverter converter, Object value, Type targetType, Object parameter, CultureInfo culture)'

是否有任何简单的解决方法?还是我做错了什么?

毫米8

但是,当我在此之后输入一些有效值时,就像这样……

如果您在键入它会再次努力decimal值入TextBox

但解决办法,否则将执行该处理之间的转换自己的自定义转换器类decimalstring

试试这个:

namespace WpfApp2
{
    class DecimalToStringConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value == null)
                return null;

            return System.Convert.ToDecimal(value).ToString(parameter as string);
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            decimal d;
            if (decimal.TryParse(value.ToString(), out d))
                return d;

            return value;
        }
    }
}

<StackPanel xmlns:local="clr-namespace:WpfApp2">
    <StackPanel.Resources>
        <local:DecimalToStringConverter x:Key="conv" />
    </StackPanel.Resources>
    <TextBox x:Name="MyIntTextBox" Text="{Binding MyInt, Converter={StaticResource conv}, ConverterParameter=0.00}"/>
    <Label Content="{Binding MyStr2}"/>
</StackPanel>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

什么是在WPF文本框中禁止特殊字符(“ \ /:?” <> |“)的可重用但简单有效的方法?

来自分类Dev

什么是在WPF文本框中禁止特殊字符(“ \ /:?” <> |“)的可重用但简单有效的方法?

来自分类Dev

在通过文本框输入有效值之前,我如何才能实质上停止VB程序?

来自分类Dev

用户清除WPF中的文本字段时,文本框未将值设置为null

来自分类Dev

WPF - 清除 TabControl 的所有 TabItem 中的所有文本框

来自分类Dev

清除绑定到wpf中的静态属性的文本框

来自分类Dev

单行WPF的文本框

来自分类Dev

WPF验证规则防止在文本框中输入小数?

来自分类Dev

来自datagrid堆栈面板WPF中文本框的输入

来自分类Dev

C#/ WPF文本框错误:“值无法转换”,TargetNull无法正常工作

来自分类Dev

C#清除所有文本框,然后取消选中WPF中的所有复选框

来自分类Dev

设置值时,WPF文本框绑定未更新

来自分类Dev

wpf datagrid:在文本框列中写入值

来自分类Dev

C#WPF滑块值和文本框

来自分类Dev

将文本框值绑定到WPF中的模型

来自分类Dev

WPF获取GridView列中文本框的绑定值

来自分类Dev

WPF - 应用程序中所有文本框的自定义错误模板

来自分类Dev

带有MVVM的WPF建议文本框

来自分类Dev

禁用WPF中的所有文本框

来自分类Dev

附加属性的 WPF“不是有效的属性值”错误,即使它按预期工作

来自分类Dev

如何修复NullReferenceException WPF文本框

来自分类Dev

WPF MVVM文本框验证

来自分类Dev

WPF IP地址掩码文本框

来自分类Dev

使用文本框过滤WPF Datagrid

来自分类Dev

从Datagrid(WPF)绑定文本框

来自分类Dev

检查WPF文本框焦点

来自分类Dev

在WPF中绑定文本框

来自分类Dev

如何修复NullReferenceException WPF文本框

来自分类Dev

ListView WPF中的文本框

Related 相关文章

  1. 1

    什么是在WPF文本框中禁止特殊字符(“ \ /:?” <> |“)的可重用但简单有效的方法?

  2. 2

    什么是在WPF文本框中禁止特殊字符(“ \ /:?” <> |“)的可重用但简单有效的方法?

  3. 3

    在通过文本框输入有效值之前,我如何才能实质上停止VB程序?

  4. 4

    用户清除WPF中的文本字段时,文本框未将值设置为null

  5. 5

    WPF - 清除 TabControl 的所有 TabItem 中的所有文本框

  6. 6

    清除绑定到wpf中的静态属性的文本框

  7. 7

    单行WPF的文本框

  8. 8

    WPF验证规则防止在文本框中输入小数?

  9. 9

    来自datagrid堆栈面板WPF中文本框的输入

  10. 10

    C#/ WPF文本框错误:“值无法转换”,TargetNull无法正常工作

  11. 11

    C#清除所有文本框,然后取消选中WPF中的所有复选框

  12. 12

    设置值时,WPF文本框绑定未更新

  13. 13

    wpf datagrid:在文本框列中写入值

  14. 14

    C#WPF滑块值和文本框

  15. 15

    将文本框值绑定到WPF中的模型

  16. 16

    WPF获取GridView列中文本框的绑定值

  17. 17

    WPF - 应用程序中所有文本框的自定义错误模板

  18. 18

    带有MVVM的WPF建议文本框

  19. 19

    禁用WPF中的所有文本框

  20. 20

    附加属性的 WPF“不是有效的属性值”错误,即使它按预期工作

  21. 21

    如何修复NullReferenceException WPF文本框

  22. 22

    WPF MVVM文本框验证

  23. 23

    WPF IP地址掩码文本框

  24. 24

    使用文本框过滤WPF Datagrid

  25. 25

    从Datagrid(WPF)绑定文本框

  26. 26

    检查WPF文本框焦点

  27. 27

    在WPF中绑定文本框

  28. 28

    如何修复NullReferenceException WPF文本框

  29. 29

    ListView WPF中的文本框

热门标签

归档