1

Caliburn.Microを使用しています。

私のビューには、ViewModelのXの値を変更TextBoxするBindedtodouble Xとaがあります。Button

public void ButtonPressed()
    {
        X = AnObject.GetDouble;
        NotifyOfPropertyChange(() => X);
    }

    public double X { get; set; }

私の目標は、表示される小数点以下の桁数を制限することです。この番号は、アプリケーションで構成可能であるため、AnObjectのプロパティとして使用できます。したがって、私はIMultiValueConverter:を定義しました

public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return String.Format(values[1].ToString(), values[0]);
    }

そして私のTextBoxを次のように定義しました:

<TextBox>
     <TextBox.Text>
           <MultiBinding Converter="{StaticResource coordinateConverter}" >
                 <Binding Path="X" />
                 <Binding Path="AnObject.FormatNumberOfDecimals" />
           </MultiBinding>
     </TextBox.Text>
</TextBox>

機能: Xの初期値であるゼロは正しくフォーマットされています。

動作しないもの:ボタンが押されたときに、新しい値がテキストボックスに表示されていません。

IMul​​tiValueConverterを使用しない提案も歓迎します。

4

3 に答える 3

0

私はの代わりにstring FormatNumberOfDecimalsフォーマットでなければならないことがわかりました。{0:0.0000}0.00000

0.0000ラベルのContentStringFormatで機能し、Visual Studio Designerで例外を発生させませんが、を使用するとTextBoxでは機能しないようString.Format()です。

{0:0.0000}ラベルのContentStringFormatと、を使用してテキストボックスで機能しますString.Format()。残念ながら、私のVisual Studio Designビューは例外をスローし、TextBoxを使用したビューには使用できません。

System.FormatException
Input string was not in a correct format.
at System.Text.StringBuilder.AppendFormat(IFormatProvider provider, String format, Object[] args)
at System.String.Format(IFormatProvider provider, String format, Object[] args)
at System.String.Format(String format, Object arg0)
于 2012-07-20T14:01:52.017 に答える
0

私は過去にもこのような問題を抱えていましたMultiConverter。バインドされた値の1つが更新されても、は自動的に更新されません。

2番目の値にバインディングを使用していないため、単一IValueConverterに切り替えて、形式をとして渡すことができます。ConverterParameter

またはStringFormat、バインディングのプロパティを使用するだけです

<TextBox Text="{Binding X, StringFormat=D4}" />

のように、Contentプロパティの代わりにプロパティをバインドしている場合、バインドのプロパティは機能しないため、代わりにラベルのプロパティを設定する必要があることに注意してください。TextLabelStringFormatContentStringFormat

于 2012-07-20T15:17:56.073 に答える
-1

それは仕事です

10進数の借方=0; 10進数のクレジット=0;

        decimal.TryParse(values[0].ToString(), out debit);
        decimal.TryParse(values[1].ToString(), out credit);

        decimal total = debit - credit;

        return total.ToString("0.00"); // string form 
于 2014-11-14T09:37:23.610 に答える