Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有双向数据绑定(双精度)的文本框不允许使用十进制分隔符_C#_Wpf_Data Binding_Double - Fatal编程技术网

C# 具有双向数据绑定(双精度)的文本框不允许使用十进制分隔符

C# 具有双向数据绑定(双精度)的文本框不允许使用十进制分隔符,c#,wpf,data-binding,double,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].D

我有以下文本框:

<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>
这很好,我在文本框中输入数据,当我点击save按钮时,我循环遍历ObservableCollection中的所有“参数”,并将它们写入XML。然而,现在我想创建一个加载按钮,但是我不想将值写入文本框,而是想在viewmodel中设置参数,并使用双向绑定。但是,当我将绑定模式更改为双向时,文本框不再接受十进制分隔符(、或)。当我尝试输入7.0时,它只是说70

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


如何解决此问题?

当您将绑定设置为双倍时,它会自动调用.ToString(),因此无需使用转换器在TextBox.Text中显示其值。不幸的是,它不允许像您描述的那样放置“.”或“.”。我有两个解决办法

  • 正如您所说,您可以按如下方式使用StringFormat,StringFormat={}{0:0.0}},但是您不能写入7.0,只能写入7或在点后更改数字
  • 第二种方法是将属性的类型从Double更改为string。然后输入“,”是允许的,但只要你想使用它,你就必须将其转换为双倍
  • 我遇到了已经可用的解决方案,请看一看

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

    例如:

        <Binding Path="VoorzieningParameters[0].Double"
                         ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged"
                         Delay=300
                         FallbackValue="0" Mode="OneWayToSource">
    
    
    
    TextBox.Text默认为字符串,请尝试使用转换器将其转换为double。您能给我一个示例吗?我尝试了一些转换器,但没有成功。是的,昨天我通过将属性更改为字符串解决了这个问题。对于这个应用程序来说,这没什么大不了的,因为我将属性转换为XML,所以我必须将它们转换为字符串,但为了将来的使用,我希望有更好的解决方案。谢谢你的意见
    public class Parameter
    {
        public Parameter()
        {
    
        }
    
        public string Naam { get; set; }
        public double? Double { get; set; }
    }
    
        <Binding Path="VoorzieningParameters[0].Double"
                         ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged"
                         Delay=300
                         FallbackValue="0" Mode="OneWayToSource">