具有双向数据绑定的TextBox(双精度型)不允许使用小数分隔符

时间:2014-09-09 11:49:03

标签: c# wpf data-binding double

我有以下文本框:

<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" });

其中参数是具有描述(Naam)和值为double的类。

public class Parameter
{
    public Parameter()
    {

    }

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

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

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

如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

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

  1. 就像你说的那样你可以使用StringFormat,如下所示,StringFormat = {} {0:0.0}},但是你不能写7.0但只能写7或更改点后的数字。
  2. 第二种方法是将属性的类型从Double更改为string。然后输入&#39;,&#39;是允许的,但是只要你想使用它就必须把它加倍。
  3. 我遇到了已有的解决方案,看看here

答案 1 :(得分:0)

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

例如:

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