【发布时间】:2014-08-15 06:03:58
【问题描述】:
我正在使用 C# 和 XAML 开发 Windows 应用商店应用程序,并且正在处理用户输入页面。我使用IValueConverter 将绑定数据转换为string 格式的货币,而不仅仅是显示小数。
当用户导航到页面时,转换器工作正常,TextBox 文本以货币格式显示。但是,当用户更改 TextBox.Text 值,然后 TextBox 失去焦点时,转换器不会再次将其更改为良好的货币格式,它只是保持用户输入的格式。
据我所知,在WPF 中没有StringFormat 可以使用,那么如何在用户编辑值后让TextBox 再次显示货币格式?
我的转换器:
public object Convert(object value, Type targetType, object parameter, string language)
{
if (parameter == null)
return ((decimal)value).ToString();
return String.Format((string)parameter, (decimal)value);
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
decimal decVal = 0M;
decimal.TryParse((string)value, out decVal);
return decVal;
}
我的 XAML:
<Grid x:Name="InputGrid">
...
<Border>
<TextBox Text="{Binding MyValue, ConverterParameter='{}{0:c}', Converter={StaticResource DecimalValueConverter}, Mode=TwoWay}"
</Border>
....
</Grid>
InputGrid.DataContext = MyValueClassInstance 在代码隐藏中设置
【问题讨论】:
-
MyValue在哪里定义?你在使用 MVVM 吗? -
@DJBurb MyValue 在包含我的
TextBox的Grid的DataContext中定义。数据绑定似乎工作正常,因为我的后端属性正在正确更新。 -
对,但是您的后端属性是否实现了 INotifyPropertyChanged?
-
@DJBurb 是的,他们是。我会仔细检查以确保 WinRT-XAML 和 INotifyPropertyChanged 没有任何“奇怪”的地方,但据我所知,它工作正常。
-
您可以在 xaml 中发布 Grid 的其余部分吗?
标签: c# winrt-xaml