2017-02-14 1 views
-1

나는 다음과 같은 형식으로 통화를 표시하는 WPF의 데이터 그리드의 열을 만들려고 노력하고 있어요 :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의 개념을 얻으려고 노력했지만 작동하는 코드를 얻을 수 없었다.

누군가 도움을 줄 수 있습니까?

업데이트 : 라민의 대답으로 부분적으로 작동합니다. 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