2016-11-18 5 views
0

변환을 수행하여 Decimal을 Int로 변환하고 싶습니다.Decimal to Int Converter

<ProgressBar Margin="0,10,0,10" 
    Grid.Row="2" Grid.ColumnSpan="3" IsIndeterminate="False" Height="10" 
    Maximum="{Binding SavingGoal, Converter={StaticResource DecimalToInt}}" Value="{Binding Balance, Converter={StaticResource DecimalToInt}}"/> 

를 그리고 여기가 바인딩이 가리키는 곳이다 : 내 코드를보고

public decimal SavingGoal { get; set; } 
public decimal Balance { get; set; } 

그래서 내 문제는 내가 없다는 것입니다 : 여기

newGoal.SavingGoal = Convert.ToDecimal(SavingsAmountsTextBox.Text); 
newGoal.Balance = 0; 

그리고 것은 클래스 내 경우에 맞게 IValueConverter를 사용하는 방법을 알아야합니다. 내 UserControl int로 구문 분석하고있는 소수점 변환하고 마지막으로 진행률 표시 줄을 만들고 싶습니다.

+1

당신이 당신의'DeciamlToInt' 컨버터를 보여줄 수 : 그 같은 말인가요? – Romasz

+0

귀하의 컨버터는 저축 목표뿐만 아니라 저울을 통과해야합니다. IValueConverter 인터페이스는 매개 변수를 지정하지만 계산을 수행하는 "파생 된 속성"을 추가하는 것이 더 간단 할 수 있습니다. public int PercentOfGoal {get {return (int) (Balance/SavingsGoal) * 100; }}', 그리고 그 값에'Value'를 바인드하십시오. –

+0

당시에는 변환기에 아무 것도 없었습니다. 지금 Convert 메서드에서 다음과 같이했습니다. 'if (값은 소수) { return System.Convert.ToInt32 (value); } return false; ' –

답변

3

정말 소수가 필요합니까? Maximum 속성과 Value 속성은 double이므로이 프로젝트가 돈에 관한 것이라면 double을 사용하십시오. 쉼표 뒤에 16 자리 이상이 필요하지 않으면 두 배로하면됩니다.

당신은 여전히 ​​변환기로 변환 할 경우

이 변환에 변환() - 방법 당신의 컨버터의 클래스

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    decimal x = (decimal)value; 
    return Decimal.ToInt32(x); 
} 
+0

감사합니다! 나는 그것을 두 배로 바꿀 것이다! –

1

당신은 정적 자원

<ns:DecimalToIntConverter x:Key="DecimalToInt" /> 

DecimalToInt 컨버터를 등록해야 그리고 다음

public class DecimalToIntConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     // convert here 
     // value is your binding - use it if you can 
     // parameter is the additional parameter that you can pass in but don't need to. 
    } 
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return value; // who cares? 
    } 
} 
+0

이미 변환기를 정적 자원으로 등록했습니다. 감사! :) –

0

당신이 소수에 대한 자르거나 라운드 하시겠습니까 구현? 반올림을해도 괜찮 으면 변환기를 사용하지 않아도됩니다. 바인딩의 StringFormat 매개 변수를 사용하여이 작업을 수행 할 수 있습니다. #의 문자열 형식을 사용하면 반올림됩니다.

+0

StringFormat 매개 변수로 시도했지만 코드의 다른 문제로 인해 제 경우에는 작동하지 않았습니다. –

0

그것은 정말 진수 않다면 먼저 확인하는 것이 좋습니다?

if (value is decimal){ return System.Convert.toInt32(value); } return false;