将double.NaN转换为转换器wpf中的相关区域性

将double.NaN转换为转换器wpf中的相关区域性,wpf,converter,cultureinfo,culture,nan,Wpf,Converter,Cultureinfo,Culture,Nan,有一个数据表,当我们没有值时,它将与doubl.NaN一起插入。 我想做的是,每当我看到double.Nan时,我想放-相反,我有一个具有以下代码的转换器: if (value.ToString() == double.NaN.ToString()) { return "-"; } 在美国文化中,一切都很完美,但是当我们使用不同的文化时,比如中国文化 它不起作用,因为double.NaN.ToString的结果是一个中文单

有一个数据表,当我们没有值时,它将与doubl.NaN一起插入。 我想做的是,每当我看到double.Nan时,我想放-相反,我有一个具有以下代码的转换器:

        if (value.ToString() == double.NaN.ToString())
        {
            return "-";
        }
在美国文化中,一切都很完美,但是当我们使用不同的文化时,比如中国文化 它不起作用,因为double.NaN.ToString的结果是一个中文单词,其中value.ToString是正常的NaN

我尝试使用double.parse使用转换器,但没有任何效果

更新-确定问题是转换器将对象获取为字符串而不是双精度这是Xaml:

  <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Border Background="Transparent"  Padding="10 8" BorderBrush="Transparent"  BorderThickness="1">
                    <Border.Resources>
                        <Style TargetType="ToolTip">
                            <Setter Property="OverridesDefaultStyle" Value="true"/>
                            <Setter Property="HasDropShadow" Value="False"/>
                            <Setter Property="VerticalOffset" Value="-46"/>
                            <Setter Property="HorizontalOffset" Value="10"/>
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate TargetType="ToolTip">
                                        <General:TextTooltip TitleStyle="{StaticResource NumericTableToolTipTitleStyle}"  Content="{TemplateBinding Content}" ContentStringFormat="G"  ContentStyle="{StaticResource NumericTableToolTipContentStyle}"/>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </Border.Resources>
                    <TextBlock x:Name="tbCellText" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, 
                               Path=Content.Text, Converter={StaticResource NumericTableCellContentConverter}, ConverterCulture={x:Static gl:CultureInfo.CurrentCulture}}"
                               ToolTip="{Binding ElementName=tbCellText, Path=Text}"
                               TextWrapping="Wrap"/>
                </Border>
            </ControlTemplate>
有没有办法保留对象的类型

我知道我可以和NaN做一个比较,但我希望有更通用的解决方案。

如果double.IsNaNvalue。。。在任何地方都可以

文档链接:

顺便说一句,如果value==double.NaN,直接比较double.NaN将不起作用,因为NaN与NaN的比较返回false!但是,您可以通过以下技巧检测NaN:if value!=价值这只适用于南部。但是显式测试double.IsNaN更具可读性

编辑:正如其他答案所建议的,在转换器中,您的值可能不是双倍的,而是对象。因此,您需要包括一张支票:

if (!(value is double))
    return ""; // or signal an error, or whatever
double d = (double)value;
if (double.IsNaN(d))
    return "-";
...
如果double.IsNaNvalue。。。在任何地方都可以

文档链接:

顺便说一句,如果value==double.NaN,直接比较double.NaN将不起作用,因为NaN与NaN的比较返回false!但是,您可以通过以下技巧检测NaN:if value!=价值这只适用于南部。但是显式测试double.IsNaN更具可读性

编辑:正如其他答案所建议的,在转换器中,您的值可能不是双倍的,而是对象。因此,您需要包括一张支票:

if (!(value is double))
    return ""; // or signal an error, or whatever
double d = (double)value;
if (double.IsNaN(d))
    return "-";
...

对Vlad的一点补充:


如果值为double&&double.IsNaNdoublevalue

则在Vlad中添加一点:


如果value为double&&double.IsNaNdoublevalue

当您绑定到double类型的属性时,转换器将获得double类型的值参数。您可以轻松做到这一点:

if (double.IsNaN((double)value))
{
    return "-";
}

绑定到double类型的属性时,转换器将获得double类型的值参数。您可以轻松做到这一点:

if (double.IsNaN((double)value))
{
    return "-";
}

不要绑定到datagridcell中的content.text属性。这就是值以字符串形式出现的原因


尝试将数据值存储在TextBlock的Tag属性中并绑定到该属性,然后在属性更新代码中设置文本的值。

不要绑定到datagridcell中的content.text属性。这就是值以字符串形式出现的原因

尝试将数据值存储在TextBlock的Tag属性中并绑定到该属性,然后在属性更新代码中设置文本的值。

解决方案-问题在于我将数据表绑定到datagrid,并且仅在绑定之后才进行 转换所有值。从数据网格中提取值总是strig类型,所以这就是我的问题。我只需要在直接绑定到数据表而不是数据网格单元格时使用转换器。

解决方案-问题是我将数据表绑定到数据网格,然后才绑定到数据网格
转换所有值。从数据网格中提取值总是strig类型,所以这就是我的问题。我只需要在直接绑定到数据表而不是数据网格单元时使用转换器。

谢谢,但我尝试了,但它不起作用。无法将值转换为double…我认为这是因为值对象正在转换为字符串NaN。您绑定到的属性不是double类型吗?如果它是一个字符串,当值为NaN时,它总是NaN,那么您的比较可以像值为string==NaN一样简单。我将它插入到一个datatable中,它是一个double,然后我将datatable绑定到xaml中的datagrid,并使用相关的转换器。我希望到达转换器的值保持不变,但显然不是。。。。我不想用绳子接力。。。有没有办法将字符串NAN转换为double?使用相关的转换器,您指的是我们在这里讨论的转换器?如果绑定到的属性是double类型,则转换器将获得double类型的值参数。如果不是这样,你必须找出原因。也许你发布了相关的带有绑定的XAML。谢谢,但是我试过了,它不起作用。无法将值转换为double…我认为这是因为值对象正在转换为字符串NaN。您绑定到的属性不是double类型吗?如果它是一个字符串,当值为NaN时,它总是NaN,那么您的比较可以像值为string==NaN一样简单。我将它插入到一个datatable中,它是一个double,然后我将datatable绑定到xaml中的datagrid,并使用相关的转换器。我希望到达转换器的值保持不变,但显然不是。。。。我不知道

想要在字符串上中继。。。有没有办法将字符串NAN转换为double?使用相关的转换器,您指的是我们在这里讨论的转换器?如果绑定到的属性是double类型,则转换器将获得double类型的值参数。如果不是这样,你必须找出原因。也许你发布了相关的带有绑定的XAML。谢谢,但是我试过了,它不起作用。无法将值转换为双精度…值参数中有哪种类型的值?字符串。我不知道它从哪里来。这意味着你绑定到一个字符串值。为什么不考虑绑定到原来的双值呢?尝试从绑定中删除Path=Content.Text,part。我想,DataGridCell的DataContext应该是原始值。DataGridCell的datacontext是DataRow类型。不是特定的细胞。所以我把整行都放在转换器里了。谢谢,但是我试过了,它不起作用。无法将值转换为双精度…值参数中有哪种类型的值?字符串。我不知道它从哪里来。这意味着你绑定到一个字符串值。为什么不考虑绑定到原来的双值呢?尝试从绑定中删除Path=Content.Text,part。我想,DataGridCell的DataContext应该是原始值。DataGridCell的datacontext是DataRow类型。不是特定的细胞。所以我把整行都放在转换器里了。谢谢,但是我试过了,它不起作用。该值无法转换为double…@Ori:好的,请您在调试器中查找,值的实际类型是什么?是的,它是一个字符串而不是double。更新了帖子,添加了相关内容Xaml@Ori:Hmmm.这个字符串来自哪里?哪段代码将double.NaN转换为本地化字符串?谢谢,但我试过了,它不起作用。该值无法转换为double…@Ori:好的,请您在调试器中查找,值的实际类型是什么?是的,它是一个字符串而不是double。更新了帖子,添加了相关内容Xaml@Ori:Hmmm.这个字符串来自哪里?哪个代码将double.NaN转换为本地化字符串?顺便说一句,转换器将converterculture作为参数之一。我知道,但只要值是字符串类型,它就没有帮助…@OriPrice请看我的答案,您绑定到了错误的属性。顺便说一句,转换器将converterculture作为参数之一我知道,但只要值是字符串类型,它就没有帮助…@OriPrice请参阅我的答案,您绑定到了错误的属性。