2017-02-14 4 views
-1

Ich versuche, eine Spalte in WPF Datagrid zu machen Währung im folgenden Format angezeigt werden:WPF Datagrid Währungsformatierung Converter

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

Außerdem würde ich die Funktion haben, müssen die Benutzer den aktuellen Wert sehen und bearbeiten Sie den Wert bei Mausklick.

Ich habe versucht, das Konzept von IValueConverter zu bekommen, konnte aber keinen funktionierenden Code bekommen.

Kann jemand helfen?

Update: mit Ramin's Antwort funktioniert es teilweise. sind hier der Code:

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(); 
    } 
} 

in WPF: Binding="{Binding LBRRev, Converter={StaticResource DollarConverter}}"

Antwort

0

Nach ein wenig Forschung habe ich jetzt eine funktionierende Version. Der Konverter:

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(); 
    } 
} 

Im XAML:

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

Hope this jeder, der die gleiche Frage haben hilft.

0

Dies ist nicht die exakte Lösung, aber können Sie es lösen:

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(); 
    } 
} 

es in der Bindung verwenden:

<DataGridTextColumn Binding="{Binding Converter={StaticResource StringFormatConverter }}"/> 
+0

Werfen Sie einen Blick auf diesen Link: https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx – Ron

+0

Danke .... bitte sehen Sie meine Updates. Immer noch konnte es nicht funktionieren – khuang

+0

siehe http://www.wpf-tutorial.com/data-binding/value-conversion-with-ivalueconverter/ – Ron