2012-01-21 6 views
1

倍数を "+"または " - "に変換するWPF変換器を作成したいと思いますSign(正または負)の符号 私はもう番号を持っていないので、変換された戻るメソッドを処理することはできません。 xaml側でコンボボックスにバインドされた "+"と " - "記号 どのようなアイデア???doubleと "+"& " - " Stringの間の変換と変換

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

だコンバーター、その後、私はむしろあなたのViewModelに固有のログインプロパティを持っているあなたをお勧めしますそのプロパティでサインを示すビューをバインドします。

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 ? "+" : "-"; 
     } 
    } 
    } 
関連する問題