更新文本框的文本格式对LostFocus - WinRT

本文关键字:文本 LostFocus WinRT 格式 更新 | 更新日期: 2023-09-27 18:08:26

我正在开发使用c#和XAML的Windows商店应用程序,并在用户输入页面上工作。我使用IValueConverter将绑定数据转换为货币格式的string,而不仅仅显示小数。

当用户导航到页面时,转换器工作正常,TextBox文本显示为货币格式。但是,当用户更改TextBox.Text值,然后TextBox失去焦点时,转换器不会再次将其更改为良好的货币格式,它只是保持用户输入的格式。

据我所知,没有StringFormat可以像WPF一样使用,所以我如何让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设置在代码后面

更新文本框的文本格式对LostFocus - WinRT

你的转换器工作两种方式?我怀疑,如果没有,双向绑定就会被破坏。

如果你这样做呢:

<TextBox Text="{Binding MyValue, UpdateSourceTrigger=PropertyChanged, ConverterParameter='{}{0:c}', Converter={StaticResource DecimalValueConverter}, Mode=TwoWay}"