2017-02-14 48 views
-1

Я пытаюсь сделать столбец в WPF DataGrid для отображения валюты в следующем формате:WPF DataGrid валюты форматированием конвертер

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

Кроме того, я должен был бы иметь функцию, пользователь может видеть фактическое значение и отредактируйте значение при щелчке мышью.

Я пытался получить концепцию IValueConverter, но не смог получить рабочий код.

Может кто-нибудь помочь?

Обновление: с ответом Рамина, он частично работает. Вот код:

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