2016-11-18 13 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}}"/> 

そして、ここではバインディングが指し示すところです:

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

そして、ここでクラスです:

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

だから私の問題は私にはないということです私の場合に合わせてIValueConverterを使用する方法を知っています。自分のUserControlが解析している小数点をintに変換して、最後にプログレスバーを動作させたい。あなたは静的リソース

<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? 
    } 
} 
+1

はあなた 'DeciamlToInt'コンバータを表示することができます:私はそのような何かを意味ですか? – Romasz

+0

あなたのコンバーターは貯蓄目標と残高を渡す必要があります。 IValueConverterインターフェイスはパラメータを指定しますが、計算を行う「派生プロパティ」を追加する方が簡単です。 'public {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

あなたは小数のために切り捨てるか、ラウンドしたいですか?丸めをしても問題がなければ、 にはコンバーターが必要ありません。バインディングのStringFormatパラメーターを使用してこれを行うことができます。 #の文字列形式を使用すると、丸められます。

+0

私はすでに静的リソースとして私のコンバータを登録しました。ありがとう! :) –

0

それを実装する必要が

+0

StringFormatパラメータで試してみましたが、私のコードの他の問題のために私のケースではうまくいきませんでした。 –

0

それは本当に進数だ場合は、最初のチェックした方が良いですか?

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