将double.NaN转换为转换器wpf中的相关区域性
有一个数据表,当我们没有值时,它将与doubl.NaN一起插入。 我想做的是,每当我看到double.Nan时,我想放-相反,我有一个具有以下代码的转换器:将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的结果是一个中文单
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请参阅我的答案,您绑定到了错误的属性。