文本框中的StringFormat有意义吗?

如果我有一个像这样的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" />
上一篇:CodeGo.net>如何在WPF中使用MVVM从另一个视图打开一个视图


下一篇:c#-“属性元素不能位于元素内容的中间.” WPF应用程序中的错误