【问题标题】:update TextBox text format on LostFocus - WinRT更新 LostFocus 上的 TextBox 文本格式 - WinRT
【发布时间】: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 在包含我的TextBoxGridDataContext 中定义。数据绑定似乎工作正常,因为我的后端属性正在正确更新。
  • 对,但是您的后端属性是否实现了 INotifyPropertyChanged?
  • @DJBurb 是的,他们是。我会仔细检查以确保 WinRT-XAML 和 INotifyPropertyChanged 没有任何“奇怪”的地方,但据我所知,它工作正常。
  • 您可以在 xaml 中发布 Grid 的其余部分吗?

标签: c# winrt-xaml


【解决方案1】:

您的转换器可以双向工作吗?我怀疑如果没有 - TwoWay 绑定会被破坏。

【讨论】:

  • 我刚刚在我的帖子中添加了CovertBack 部分......据我所知,它工作正常。
【解决方案2】:

如果你这样做会怎样:

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

【讨论】:

  • 很遗憾,也没有UpdateSourceTrigger :(
猜你喜欢
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-15
  • 1970-01-01
  • 2017-03-18
相关资源
最近更新 更多