我有以下文本框:

<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>

在 View 模型中:
VoorzieningParameters = new ObservableCollection<Parameter>();
VoorzieningParameters.Add(new Parameter() { Naam = "berging" });

其中 Parameter 是一个带有描述 (Naam) 和 double 值的类。
public class Parameter
{
    public Parameter()
    {

    }

    public string Naam { get; set; }
    public double? Double { get; set; }
}

这工作正常,我在文本框中输入数据,当我点击保存按钮时,我循环遍历 ObservableCollection 中的所有“参数”并将它们写入 XML。但是现在我想制作一个加载按钮,而不是将值写入文本框,我只想在 View 模型中设置参数并改用 TwoWay 绑定(bind)。但是,当我将绑定(bind)模式更改为 TwoWay 时,文本框不再接受小数点分隔符(或 .)。当我尝试输入 7.0 时,它只是说 70。

我试过在文本框上使用字符串格式,然后它允许一个分隔符但是当我尝试输入像 7.0 这样的东西时它变成了 7.0.0

我该如何解决这个问题?

最佳答案

当您将绑定(bind)设置为 double 时,它​​会自动调用 .ToString(),因此无需使用 Converter 在 TextBox.Text 中显示其值。不幸的是,它不允许放置 '.'或 ',' 正如你所描述的。我有几个解决方案

  • 就像你说的,你可以使用 StringFormat 如下,StringFormat={}{0:0.0}},但是你不能写 7.0 而只能写 7 或改变点后的数字。
  • 第二种方法是将您的属性类型从 Double 更改为 string。然后输入 ',' 是允许的,但是当你想使用它时你必须把它转换成双倍。
  • 我遇到了已经可用的解决方案,看看 here
  • 关于c# - 具有双向数据绑定(bind)(双)的文本框不允许小数点分隔符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25743902/

    10-16 01:26