【发布时间】:2017-02-10 13:57:25
【问题描述】:
我计划实现代码,该代码将使用 IValueConverter 根据用户设置的布尔值以公制或英制显示度量单位。我面临的问题是存储在我的数据库中的数据必须始终采用公制。如果有区别,我会先使用实体框架数据库。
所以我想知道的情况是:如果用户选择以英制单位显示数据,但随后更改了其中一个字段并将其保存 - 我如何确保它以公制正确保存?从我通过在线研究收集的信息来看,这似乎是转换器的 ConvertBack 方法的一部分?现在我调用 Textbox.GetBindingExpression(TextBox.TextProperty).UpdateSource();保存数据,我不明白如何使它工作,因为据我所知,它只是抓取 TextBox 中的值并保存它。我是对的,或者如果有一个 ConvertBack 方法会被调用以获取 TextProperty?
另外,一般来说,我是否以正确的方式进行此操作(即使用 IValueConverter 来更改显示)?老实说,我在这个项目上有点不知所措,但我的最后期限很快就要到了,我迫切需要把这件事做好。任何帮助将不胜感激。
谢谢。
【问题讨论】:
-
您需要将您的文本框与 Mode=TwoWay 绑定。然后,当您的模型设置文本框中的值时,将调用您的转换器 ConvertBack。
-
好的@Evk。就这样我确定我明白了:如果我设置 Mode=TwoWay 那么当我调用 Textbox.GetBindingExpression(TextBox.TextProperty).UpdateSource();那么它应该保存 ConvertBack() 转换器的结果吗?抱歉,如果我听起来很密集,我只是想确定一下。感谢您的帮助。
-
感谢@Rom 的链接
-
您根本不需要调用 UpdateSource。使用 TwoWay 绑定,当您更改 TextBox 中的文本时(失去焦点或立即查看链接问题) - 它会更新模型中的值(通过转换器的 ConvertBack 方法,如果有转换器)。
标签: c# wpf entity-framework units-of-measurement