当我们没有值时,有一个数据表正在插入doubl.NaN。 我想要做的是每当我看到double.Nan我想改为“ - ”,因此我有一个带有以下代码的转换器:
if (value.ToString() == double.NaN.ToString())
{
return "-";
}
一切都在“en-us”文化上完美运作,但是当我们使用不同的文化时(比如“zn-cn”) 它不起作用,因为“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”进行比较,但我希望能找到更通用的解决方案。
答案 0 :(得分:2)
当您绑定到double
类型的属性时,转换器会获得类型为value
的{{1}}参数。你可以很容易地做到这一点:
double
答案 1 :(得分:1)
if (double.IsNaN(value)) ...
可以在任何语言环境中使用。
文档链接:http://msdn.microsoft.com/en-us/library/system.double.isnan.aspx
BTW,与double.NaN
(if (value == double.NaN)
)的直接比较无效,因为NaN
与NaN
的比较会返回false
!但是,您可以通过这样的技巧检测NaN
:if (value != value) ...
(这仅适用于NaN
s)。但是明确的测试double.IsNaN
更具可读性。
修改:正如其他答案所示,在转换器内,value
可能不是double
,而是object
。所以你需要包括一张支票:
if (!(value is double))
return ""; // or signal an error, or whatever
double d = (double)value;
if (double.IsNaN(d))
return "-";
...
答案 2 :(得分:1)
弗拉德的一点点补充:
if(value为double&amp;&amp; double.IsNaN((double)value))
答案 3 :(得分:0)
不要绑定到datagridcell中的content.text属性。这就是价值以字符串形式出现的原因。
尝试将数据值存储在TextBlock的Tag属性中并绑定到该属性,然后在属性更新代码中设置文本的值。