2012-07-19 85 views
1

有一個datatable,當我們沒有值時,它將被插入到doubl.NaN。 我想要做的是每當我看到double.Nan我希望把「 - 」來代替,因此我有下面的代碼轉換器:將double.NaN轉換爲轉換器中的相關文化wpf

 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

順便說一句,轉換器已將converterculture作爲參數之一 – Vlad 2012-07-19 14:58:23

+0

是啊,我知道,但它不會幫助,只要值是字符串類型... – 2012-07-19 15:02:45

+0

@OriPrice看到我的答案,你綁定了錯誤的屬性。 – 2012-07-19 15:35:36

回答

0

解決方案 -問題是,我綁定數據表到數據網格,只有在那之後,我 轉換所有值。從數據網格中提取值始終是strig的類型,所以出現了我的問題。我只需要使用轉換器,而直接綁定到數據表而不是datagrid單元格。

1

if (double.IsNaN(value)) ...可以在任何地區使用。

文檔鏈接:http://msdn.microsoft.com/en-us/library/system.double.isnan.aspx

BTW,直接比較double.NaNif (value == double.NaN))將行不通,因爲NaNNaN回報false的比較!然而,您可以通過以下技巧檢測NaNif (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 "-"; 
... 
+0

謝謝,但我試過了,它不工作。該值無法轉換爲double .... – 2012-07-19 14:35:37

+0

@Ori:那麼,請問您在調試器中查看「value」的實際類型是什麼? – Vlad 2012-07-19 14:42:46

+0

是它的一個字符串,而不是雙。更新了帖子(添加了相關的Xaml) – 2012-07-19 14:58:04

1

一個小除了弗拉德:

如果(值是雙& & double.IsNaN((雙)值))

+0

謝謝,但我試過了,它不工作。該值不能被轉換爲double ... – 2012-07-19 14:34:55

+0

你在值參數中有什麼類型的值? – 2012-07-19 14:37:40

+0

字符串。我不知道它來自哪裏。 – 2012-07-19 15:07:14

2

當你綁定到類型爲double的屬性,轉換器將獲得類型爲doublevalue參數。你可以很容易地做到這一點:

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

謝謝,但我試過了,它不工作。該值不能被轉換爲double .... – 2012-07-19 14:32:40

+0

我認爲它是因爲值對象正在轉換爲字符串(「NaN」)不知何故 – 2012-07-19 14:36:21

+0

是不是你綁定到'double'類型的屬性?如果它的值是'NaN'時總是爲「NaN」,那麼你的比較就像'if(value as string ==「NaN」)''一樣簡單。 – Clemens 2012-07-19 14:38:47

0

不要綁定到datagridcell中的content.text屬性。這就是價值以字符串形式出現的原因。

嘗試將數據值存儲在TextBlock的Tag屬性中並綁定到該屬性,然後在屬性更新的代碼中設置文本的值。

+0

謝謝,我會盡力並更新你。 – 2012-07-20 22:17:51