2017-02-14 118 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的概念,但無法獲得工作代碼。

有人可以幫忙嗎?

更新:與Ramin的答案,它是部分工作。 這裏是代碼:

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

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

回答

0

經過一番研究,我現在有一個工作版本。 轉換器:

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

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

希望這有助於人誰具有同樣的問題。

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