2

値がない場合にdoubl.NaNで挿入されるデータテーブルがあります。私がやりたいのは、doubleが表示されたときです。代わりに「-」を付けたいので、次のコードのコンバーターがあります。

        if (value.ToString() == double.NaN.ToString())
        {
            return "-";
        }

すべてが「en-us」カルチャで完全に機能しましたが、「zn-cn」などの異なるカルチャを使用すると、「double.NaN.ToString()」の結果が中国語の単語であるため、機能しません。 .ToString()は通常の「NaN」です。

コンバーターを使用してdouble.parse()を使用してみましたが、何も機能しませんでした。

更新-わかりました。問題は、コンバーターがオブジェクトを文字列として取得し、これがXamlの2倍ではないことです。

  <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」と比較するだけでいいのですが、もっと一般的な解決策が欲しいです。

4

5 に答える 5

2

タイプのプロパティにバインドするとdouble、コンバータはタイプのvalueパラメータを取得しますdouble。あなたは簡単にこれを行うことができます:

if (double.IsNaN((double)value))
{
    return "-";
}
于 2012-07-19T14:01:12.620 に答える
1

if (double.IsNaN(value)) ...どのロケールでも実行できます。

ドキュメントリンク: http: //msdn.microsoft.com/en-us/library/system.double.isnan.aspx

ところで、 toの比較は戻るので、 double.NaNif (value == double.NaN))への直接比較は機能しません!ただし、このようなトリックで検出できます:(これはsにのみ当てはまります)。ただし、明示的なテストの方が読みやすくなります。NaNNaNfalseNaNif (value != value) ...NaNdouble.IsNaN

編集:他の回答が示唆しているように、コンバーター内でvalueはおそらくそうではありませんdoubleが、object。したがって、チェックを含める必要があります。

if (!(value is double))
    return ""; // or signal an error, or whatever
double d = (double)value;
if (double.IsNaN(d))
    return "-";
...
于 2012-07-19T13:58:37.327 に答える
1

Vladへのちょっとした追加:

if(value is double && double.IsNaN((double)value))

于 2012-07-19T14:00:40.850 に答える
0

datagridcellのcontent.textプロパティにバインドしないでください。そのため、値は文字列として入力されます。

TextBlockのTagプロパティにデータ値を保存してバインドしてから、プロパティが更新されたコードでテキストの値を設定してみてください。

于 2012-07-19T15:35:01.797 に答える
0

解決策-問題は、データテーブルをデータグリッドにバインドし、その後ですべての値を変換していることです。データグリッドからの値の抽出は常にstrig型であるため、問題が発生しました。データグリッドセルではなく、データテーブルに直接バインドするときにコンバーターを使用する必要があります。

于 2015-05-04T19:16:02.393 に答える