1

我正在使用 Caliburn.Micro。

在我的视图中,我有一个TextBoxBinded todouble X和一个在我的 ViewModelButton改变X值的。

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 的初始值为零,格式正确。

什么不起作用:按下按钮时,新值不会显示在 TextBox 中。

也欢迎不使用 IMultiValueConverter 的建议。

4

3 回答 3

0

我过去也遇到过这样的问题,MultiConverter当其中一个绑定值更新时, a 不会自动更新。

由于您没有为第二个值使用绑定,因此您可以切换到单个IValueConverter,并将您的格式作为ConverterParameter

或者干脆使用StringFormat绑定的属性

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

请注意,如果您绑定的是Content属性而不是Text属性,例如在 a 上LabelStringFormat则绑定的属性将不起作用,您需要改为设置标签的ContentStringFormat属性。

于 2012-07-20T15:17:56.073 回答
0

事实证明,我的string FormatNumberOfDecimals应该是 format{0:0.0000}而不是0.00000.

0.0000适用于标签的 ContentStringFormat 并且不会在我的 Visual Studio 设计器中导致异常,但在使用String.Format().

{0:0.0000}适用于标签的 ContentStringFormat 和使用String.Format(). 不幸的是,我的 Visual Studio 设计视图现在抛出异常,并且对带有我的 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 回答
-1

那是工作

十进制借方 = 0; 小数信用 = 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 回答