使用WPF Binding StringFormat和输入和输出的文字

时间:2017-03-30 10:34:04

标签: c# wpf xaml

我在WPF桌面应用UI中有一个字体磅值选择器。我以前在这种情况下使用转换器,它也可能是去这里的方式。

但是,我可以使用StringFormat进行绑定,这看起来更简单(避免创建转换器)。它适用于数值,但似乎我不能将文字添加到这样的格式: StringFormat ='{} {0:N} pt'

在XAML中:

<ComboBox Text="{Binding SampleFontSize, StringFormat='{}{0:N} pt', ValidatesOnDataErrors=True" IsEditable="True">
<ComboBoxItem>8</ComboBoxItem>
<ComboBoxItem>10</ComboBoxItem>
<ComboBoxItem>12</ComboBoxItem>
<ComboBoxItem>14</ComboBoxItem>

注意IsEditable = true

这将在我的语言环境中显示“12,00 pt”但是当我键入完全相同的值时,它将触发验证错误:

System.Windows.Data Error: 7 : ConvertBack cannot convert value '12 pt' (type 'String'). BindingExpression:Path=SampleFontSize; DataItem='AnalysisSettingsViewModel' (HashCode=47173034); target element is 'ComboBox' (Name=''); target property is 'Text' (type 'String') FormatException:'System.FormatException: Input string was not in a correct format.
at System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
at System.String.System.IConvertible.ToDouble(IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at MS.Internal.Data.SystemConvertConverter.ConvertBack(Object o, Type type, Object parameter, CultureInfo culture)
at System.Windows.Data.BindingExpression.ConvertBackHelper(IValueConverter converter, Object value, Type sourceType, Object parameter, CultureInfo culture)'

Shoudl我得出结论,带文字的StringFormat只能单向工作,或者我使用的是不正确的StringFormat? StringFormat = {} {0:N} 可以正常工作,但不能 StringFormat = {} {0:N} pt

1 个答案:

答案 0 :(得分:1)

自&#34; 12 pt&#34;该值不是有效的double值,默认转换器无法将其转换回double。所以是的,这确实只是单向工作。

您应该使用也知道如何将string转换为double的自定义转换器。