2017-02-14 20 views
-1

私は次の形式で通貨を表示するには、WPFのデータグリッドで列を作るしようとしています:WPFのデータグリッド通貨のフォーマットコンバーター

value <= 9999, display format set to $1,234; 
value <= 99999, display format set to $12k; 
value >99999, display format set to $12M; 

また、私は、ユーザーが実際の値を見ることができる機能を持っている必要がありますマウスクリック時に値を編集します。

私はIValueConverterのコンセプトを取得しようとしていますが、動作するコードを取得できませんでした。

誰かが助けることができますか?

更新:ラミンの答えでは、部分的に働いています。 WPFで

public class DollarConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     double v = double.Parse(value.ToString()); 

     if (v <= 9999) 
     { 
      return v.ToString("C0"); 
     } 
     else if (v <= 999999) 
     { 
      double vv = v/1000; 
      return vv.ToString("C0") + "K"; 
     } 
     else if (v > 99999) 
     { 
      double vvv = v/1000000; 
      return vvv.ToString("C0") + "M"; 
     } 

     return v; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

Binding="{Binding LBRRev, Converter={StaticResource DollarConverter}}"

答えて

0

少しの研究の後、私は現在作業中のバージョンを持っています。 コンバータ:XAMLで

public class DollarConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    {    
     double v = double.Parse(value.ToString()); 

     if (v <= 9999) 
     { 
      return v.ToString("C0"); 
     } 
     else if (v <= 999999) 
     { 
      return (v/1000).ToString("C0")+"K"; 
     } 
     else if (v > 999999) 
     { 
      return (v/1000000).ToString("C1") + "M"; 
     } 


     return v; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 

     throw new NotImplementedException(); 
    } 
} 

<DataGridTemplateColumn Header="Mat. Rev" Width = "22*"> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding MatRev, Converter={StaticResource DollarConverter}}"/> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
        <DataGridTemplateColumn.CellEditingTemplate> 
         <DataTemplate> 
          <TextBox Text="{Binding Path=MatRev, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellEditingTemplate> 
       </DataGridTemplateColumn> 

希望、これは同じ質問を持っている人を支援します。

0

これは厳密解ではありませんが、あなたはそれを解決するのに役立つことができます。

public class StringFormatConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     int v = int.Parse(value.ToString()); 

     if (v <= 9999) 
      return v.ToString("C0"); 
     else if (v <= 99999) 
      decimal vv = v/1000; 
      return vv.ToString("C0") + "k"; 
     return v; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

バインディングでそれを使用します。

ここ は、コードされています
<DataGridTextColumn Binding="{Binding Converter={StaticResource StringFormatConverter }}"/> 
+0

このリンクをご覧ください:https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx – Ron

+0

ありがとう....私の更新を見てください。まだそれを得ることができなかった – khuang

+0

http://www.wpf-tutorial.com/data-binding/value-conversion-with-ivalueconverter/を参照してください – Ron