double과 바인딩하는 TextBox에 소수점을 입력 할 수 없습니다!
배경
TextBox
가 숫자 형식( int
또는 double
)에 바인딩됨 <TextBox Text="{Binding Path=Number, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
TextBox.Text
속성을 숫자 형식의 Number
와 바인딩합니다.Mode=TwoWay
이므로 TextBox
를 입력하면 해당 값을 바인딩하는 Number
에 씁니다. (이것은 TextBox
의 기본 동작이므로 작성하지 않아도됩니다.)또,
UpdateSourceTrigger=PropertyChanged
라고 하고 있기 (위해)때문에, TextBox
의 디폴트의 동작인 포커스가 벗어났을 때가 아니고, 값을 입력한 순간에 Number
에 기입합니다.int(long)라고 확실!
바인딩
Number
이 int
또는 long
와 같은 정수형이면 아무런 문제없이 작동합니다!덧붙여서, 숫자 이외의 문자열을 넣었을 경우는, 테두리가 붉어지고, 입력에 잘못이 있는 것도 자동적으로 표시해 줍니다!
입력에 오류가 있으면 바인드
Number
도 업데이트되지 않습니다.얼마나 편리!
double(float)라면…
그런데, 바인드 하고 있는
Number
하지만, double
나 float
등 소수점 이하를 포함한 수치형이 되면, 문제가 생깁니다!소수점을 입력할 수 없습니다!
「123.45」라고 왼쪽의 1부터 순서대로 입력해 가면, 소수점이 입력되지 않고 「12345」가 되어 버립니다!
소수점을 전혀 입력할 수 없는가 하면, 그렇지 않고, 「12345」라고 입력한 후, 「3」과 「4」사이에 커서를 놓고, 「.」를 입력하면, 올바르게 「123.45」가 됩니다 .
즉, 숫자열의 마지막(말미)에 소수점을 입력할 수 없습니다!
무슨 일이야? (추측)
System.Windows.Data Error: 7 : ConvertBack cannot convert value '123a' (type 'String'). BindingExpression:Path=Model.Number1; DataItem='SimpleCalcViewModel' (HashCode=20876819); target element is 'TextBox' (Name=''); target property is 'Text' (type 'String') FormatException:'System.FormatException: 入力文字列の形式が正しくありません。
場所 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
場所 System.Number.ParseInt64(String value, NumberStyles options, NumberFormatInfo numfmt)
場所 System.String.System.IConvertible.ToInt64(IFormatProvider provider)
場所 System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
場所 MS.Internal.Data.SystemConvertConverter.ConvertBack(Object o, Type type, Object parameter, CultureInfo culture)
場所 System.Windows.Data.BindingExpression.ConvertBackHelper(IValueConverter converter, Object value, Type sourceType, Object parameter, CultureInfo culture)'
수치 이외를 입력했을 때에, Visual Studio 의 출력 윈도우에 나오는 예외의 백 트레이스로부터, 다음과 같은 메카니즘이 되어 있는 것 같습니다.
TextBox
에 숫자(문자) 입력Number.ParseInt64
또는 Number.ParseDouble
메서드를 사용하여 숫자로 변환 TextBox
에 표시합니다 여기서 문제가 되는 것이, 「변환에 성공하면, 그 수치를
TextBox
에 표시한다」곳입니다.끝에 소수점을 입력하면 예를 들어 문자열 "123."이 됩니다.
이것을
Number.ParseDouble
메소드가 변환하면(자), 123 이라고 하는 수치가 됩니다.123이라는 수치는, 표시하면 「123」이 되어, 소수점은 없어져 버립니다!
어떻게해야합니까? (HELP!)
그럼, 어떻게 하면 좋을까요, 죄송합니다! 아직 모르겠어요!
누군가, 교수해 주시면 다행입니다!
UpdateSourceTrigger=PropertyChanged
를 취하면 좋지만, 실시간으로 갱신되지 않게 되어 버리니까요. 실시간으로 업데이트하고, 마지막에 소수점을 입력하고 싶습니다만…해결편⁉ , 완결편‼ 에 계속한다.
Reference
이 문제에 관하여(double과 바인딩하는 TextBox에 소수점을 입력 할 수 없습니다!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/h084/items/b562526c3dceb693bd64텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)