2012-01-21 185 views
1

我想创建WPF转换器,将双数转换为“+”或“ - ”字符串基于数字Sign(正或负) 但I无法处理转换后的方法,因为我没有这个号码了。 “+”和“ - ”符号绑定到xaml端的组合框 任何想法???double和“+”和“ - ”之间的转换和转换字符串

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> 
+1

为什么人们要这样对自己? –

回答

0

如果这个想法不只是能够使用(和开发)转换器,那么我宁愿建议你有一个特定的符号属性,在您的视图模型并绑定您的视图显示标志与该属性。

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 ? "+" : "-"; 
     } 
    } 
    } 
相关问题