双和“+”之间的转换和转换& “ - ”字符串

时间:2012-01-21 01:59:32

标签: wpf

我想创建WPF转换器,根据数字Sign(正数或负数)将双数转换为“+”或“ - ”字符串 但我无法处理转换后的方法,因为我不再有这个数字了。 “+”和“ - ”符号与xaml侧的组合框结合 任何想法???

    public class AmountToDebitCreditConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if ((value == null) || (System.Convert.ToDecimal(value) == 0))
            return string.Empty;

        return System.Convert.ToDecimal(value) > 0 ? "+" : "-";
    }


    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        KeyValue kv = value as KeyValue;

        if ((String)value == "+")
            return 1;
        else
            return -1;
    }
}

这是我的Xaml代码

    <igDP:UnboundField Name="ActualAdjustmentAmount" Label="PlusMinusKey"  Converter={StaticResource signConverter} >
                            <igDP:Field.Settings>
                                <igDP:FieldSettings EditorType="{x:Type igEditors:XamComboEditor}"  LabelWidth="40" CellWidth="40">
                                    <igDP:FieldSettings.EditorStyle>
                                        <Style TargetType="{x:Type igEditors:XamComboEditor}">
                                            <Setter Property="ItemsSource" Value="{Binding Path=Flags, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MainWindow}}}" />
                                            <Setter Property="FlowDirection" Value="LeftToRight"/>
                                            <Setter Property="SelectedItem" Value="{Binding Path=ActualAdjustmentAmount }" />
                                        </Style>
                                    </igDP:FieldSettings.EditorStyle>
                                </igDP:FieldSettings>
                            </igDP:Field.Settings>
                        </igDP:UnboundField>

2 个答案:

答案 0 :(得分:0)

如果想法不仅仅是能够使用(和利用)转换器,那么我宁愿建议您在ViewModel中使用特定的Sign属性,并绑定显示该属性的符号的视图。

答案 1 :(得分:0)

最好尽可能在视图模型中进行这种转换。

尽管如此,您已经确定了问题 - 转换后您不再拥有该号码。事实是您不需要从转换器返回一个字符串 - 您可以返回任何将从其ToString()覆盖返回所需字符串的对象,并且该对象可以包含您的任何其他数据和行为想。

这是一个应该完成你所追求的转换器,虽然我还没有真正测试过这个:

  public class SignedDoubleConverter : IValueConverter
  {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
      return new DisplaySignedDouble(value);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
      var d = value as DisplaySignedDouble;
      return (d == null || !d.Value.HasValue)
        ? 0d 
        : d.Value.Value;
    }

    private class DisplaySignedDouble
    {
      public DisplaySignedDouble(object value)
      {
        Value = value is double ? (double) value : (double?) null;
      }

      public double? Value { get; private set; }

      public override string ToString()
      {
        if (!Value.HasValue || Value.Value == 0d)
        {
          return string.Empty;
        }

        return Value.Value > 0 ? "+" : "-";
      }
    }
  }