【问题标题】:TextBox with TwoWay DataBinding (double) does not allow decimal separator具有 TwoWay DataBinding (double) 的 TextBox 不允许小数分隔符
【发布时间】:2014-11-02 19:58:28
【问题描述】:

我有以下文本框:

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

在 viewModel 中:

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。但是现在我想制作一个加载按钮,而不是将值写入文本框,我只想在视图模型中设置参数并使用 TwoWay 绑定。但是,当我将绑定模式更改为双向时,文本框不再接受小数分隔符(或。)。当我尝试输入 7.0 时,它只是 sais 70。

我尝试在文本框上使用字符串格式,然后它允许使用分隔符,但是当我尝试输入类似 7.0 的内容时,它变成了 7.0.0

我该如何解决这个问题?

【问题讨论】:

  • TextBox.Text 默认为 String,尝试使用 Converter 将其转换为 Double
  • 你能举个例子吗?我试过几个转换器都没有成功

标签: c# wpf data-binding double


【解决方案1】:

对于您的绑定,请尝试添加延迟。我用300,你可以用任何数字。这似乎对我的应用程序有用。

例如:

    <Binding Path="VoorzieningParameters[0].Double"
                     ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged"
                     Delay=300
                     FallbackValue="0" Mode="OneWayToSource">

【讨论】:

    【解决方案2】:

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

    1. 就像你说的,你可以使用 StringFormat 如下,StringFormat={}{0:0.0}},但是你不能写 7.0 只能写 7 或在点后更改数字。
    2. 第二种方法是将属性类型从 Double 更改为字符串。然后输入','是允许的,但你必须在你想使用它的时候把它转换成双倍。
    3. 我遇到了已经可用的解决方案,看看here

    【讨论】:

    • 是的,昨天我通过将我的属性更改为字符串来解决它,对于这个应用程序来说,这并不是什么大问题,因为我将属性提供给 XML,所以无论如何我都必须将它们转换为字符串,但为了将来使用我是希望对此有更好的解决方案。感谢您的意见
    猜你喜欢
    • 2019-04-23
    • 2013-09-15
    • 2014-02-15
    • 2011-04-18
    • 2014-06-10
    • 2012-03-23
    • 2021-09-30
    • 1970-01-01
    • 2012-03-11
    相关资源
    最近更新 更多