我正在使用Caliburn.Micro。
在我的视图中,我有TextBox
绑定到double X
和Button
,其中更改了 X 的值 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的建议。
答案 0 :(得分:0)
事实证明,我的string FormatNumberOfDecimals
格式为{0:0.0000}
,而不是0.00000
。
0.0000
适用于Label的ContentStringFormat,在我的Visual Studio Designer中不会导致异常,但在使用String.Format()
时显然无法在TextBox上使用。
{0:0.0000}
使用String.Format()
在Label的ContentStringFormat和我的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)
答案 1 :(得分:0)
我过去也遇到过这样的问题,当其中一个绑定值更新时,MultiConverter
不会自动更新。
由于您没有使用绑定作为第二个值,因此您可以切换为单个IValueConverter
,并将格式作为ConverterParameter
或者只是使用绑定的StringFormat
属性
<TextBox Text="{Binding X, StringFormat=D4}" />
请注意,如果绑定Content
属性而不是Text
属性,例如Label
,则绑定的StringFormat
属性将不起作用而您需要设置Label的ContentStringFormat
属性。
答案 2 :(得分:-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