具有双向数据绑定(双精度)的TextBox不允许使用十进制分隔符
本文关键字:不允许 TextBox 分隔符 十进制 数据绑定 双精度 | 更新日期: 2023-09-27 18:21:23
我有以下文本框:
<TextBox x:Name="VoorzieningBerging"
HorizontalAlignment="Right" TextChanged="SimulatieWijziging"
Margin="0,0,45,0" Width="60" Height="25">
<TextBox.Text>
<Binding Path="VoorzieningParameters[0].Double"
ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged"
FallbackValue="0" Mode="OneWayToSource">
<Binding.ValidationRules>
<src:DoubleValidation/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
在视图中模型:
VoorzieningParameters = new ObservableCollection<Parameter>();
VoorzieningParameters.Add(new Parameter() { Naam = "berging" });
其中,Parameter是一个具有描述(Naam)和值的双精度的类。
public class Parameter
{
public Parameter()
{
}
public string Naam { get; set; }
public double? Double { get; set; }
}
这很好,我在文本框中输入数据,当我点击保存按钮时,我循环浏览ObservableCollection中的所有"参数",并将它们写入XML。然而,现在我想制作一个加载按钮,但我不想将值写入文本框,而是只想在视图模型中设置Parameters,并使用TwoWay绑定。然而,当我将绑定模式更改为TwoWay时,Textbox不再接受十进制分隔符(,或.)。当我尝试输入7.0时,它只显示70。
我试过在文本框中使用字符串格式,然后它允许使用分隔符,但当我尝试输入7.0之类的内容时,它变成了7.0.0
我该如何解决这个问题?
对于绑定,请尝试添加延迟。我用300,你可以用任何数字。这似乎对我的应用程序起到了作用。
例如:
<Binding Path="VoorzieningParameters[0].Double"
ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged"
Delay=300
FallbackValue="0" Mode="OneWayToSource">
当您将绑定设置为双倍时,它会自动调用.ToString(),因此不需要使用Converter在TextBox.Text中显示其值。遗憾的是,它不允许放置"."或者如你所描述的","。我有两个解决方案
- 正如您所说,您可以按如下方式使用StringFormat,StringFormat={}{0:0.0}},但您不能写7.0,只能写7或更改点后的数字
- 第二种方法是将属性的类型从Double更改为string。然后输入","是允许的,但无论何时您都必须将其强制转换为双精度
- 我遇到了现有的解决方案,请查看此处