如果我有一个像这样的TextBox:
<TextBox Text="{Binding Voltage, StringFormat={}{0} kV}" />
且属性电压为50,我的文本框中显示“ 50 kV”.这就是我的意图.
但是现在,如果用户想输入一个新值,例如40并键入“ 40 kV”,他会得到一个红色边框,因为存在FormatException转换回该值.
System.Windows.Data Error: 7 : ConvertBack cannot convert value '40 kV' (type 'String'). BindingExpression:Path=Voltage; DataItem='VMO_VoltageDefinition' (HashCode=19837180); target element is 'TextBox' (Name=''); target property is 'Text' (type 'String') FormatException:'System.FormatException: Die Eingabezeichenfolge hat das falsche Format.
我认为我程序的用户不会接受这一点.
那么,我是在做错什么吗?或者该功能不能以合理的方式与TextBox一起使用?
解决方法:
StringFormat是Binding标记扩展的属性,理论上可以在任何绑定中使用.但是,大多数情况下,仅单向绑定才有意义.
没错,字符串格式在TextBox中没有多大意义.
您可以按照David的建议通过转换器解决该问题,但我建议您在TextBox外部的TextBlock中显示该单元:
<DockPanel>
<TextBlock Text="kV" DockPanel.Dock="Right />
<TextBox Text="{Binding Voltage}" />
</DockPanel>
这感觉更自然,并提供更好的用户体验.
或者,您可以创建具有新属性的自定义控件,该自定义控件是从TextBox派生的,该新属性称为Unit或Description或其他内容,然后修改控件模板,以便显示该单位.然后,最终标记可能如下所示:
<my:TextBox Text="{Binding Voltage}" Description="kV" />