TextBox:绑定到双精度,通过IMultiValueConverter:在ViewModel中更改值时未更新



我正在使用Caliburn.Micro.

在我的视图中,我有一个绑定到double XTextBox和一个更改ViewModel中X值的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的初始值零。

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

也欢迎不使用IMultiValueConverter的建议。

原来我的string FormatNumberOfDecimals的格式应该是{0:0.0000},而不是0.00000

0.0000适用于标签的ContentStringFormat,在我的Visual Studio设计器中不会引起异常,但在使用String.Format()时显然不适用于TextBox。

{0:0.0000}处理标签的ContentStringFormat,并使用String.Format()处理我的TextBox。不幸的是,我的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)

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

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

或者简单地使用绑定的StringFormat属性

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

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

这就是工作

十进制借方=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 

相关内容

  • 没有找到相关文章

最新更新