首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StringFormat "N2“问题(?

StringFormat "N2“问题(?
EN

Stack Overflow用户
提问于 2016-09-24 02:47:08
回答 2查看 2.2K关注 0票数 0

我有一个有点好奇的问题。我使用的是"StringFormat = N2“。当我有值"1,00“时,我把光标放在",”后面,我按“退格键”,数字就神奇地变成了"100,00“。见鬼!我需要保持"1,00“几乎总是"100,00”= "10.000,00“等等

代码语言:javascript
复制
<TextBox Height="40" VerticalContentAlignment="Center" Width="320">
    <TextBox.Text>
        <Binding Path="Weight"
                 StringFormat="N2"
                 ConverterCulture="es-AR"
                 UpdateSourceTrigger="PropertyChanged">
        </Binding>
    </TextBox.Text>
</TextBox>
EN

回答 2

Stack Overflow用户

发布于 2016-09-24 04:17:02

两个观察结果:

  1. StringFormat=N2告诉UI文本框中的值应格式化为具有两个小数位的数字。ConverterCultuer= es-AR中的
  2. 告诉UI小数位字符是逗号。

所以让我们一步一步来:

  1. Value is 1(显示为1,00)
  2. 删除逗号,但保留零
  3. Value现在为100 (显示为100,00)

我看不出有什么问题。

票数 4
EN

Stack Overflow用户

发布于 2016-09-24 04:08:50

我认为问题在于这个属性:

代码语言:javascript
复制
UpdateSourceTrigger="PropertyChanged"

这迫使WPF在每次TextBox的内容发生变化时向视图模型发回一个值,例如,因为已经在其中键入或删除了一个字符。

假设您的视图模型包含文本1,00,而double - TextBox包含double1.0。然后删除逗号,这样文本框中的文本就是100。由于文本已更改,这将强制WPF从视图更新view-model。字符串100成为double100.0,该值是在视图模型的Weight属性中设置的。

如果您的视图模型类实现了INotifyPropertyChanged (我假设它实现了),那么它将为Weight属性触发一个PropertyChanged事件。WPF侦听此事件,然后从Weight属性更新TextBox的内容。因此,您的TextBox将包含文本100,00,因为这是使用N2格式字符串格式化值100.0的结果。

最简单的修复方法是删除属性UpdateSourceTrigger="PropertyChanged"。这会导致WPF仅在TextBox失去焦点时更新视图模型。您正在处理的是数值输入,中间值很可能是无效的或可能被误解,因此最好等到用户输入完数值后再尝试对其执行任何操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39667633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档