【发布时间】:2011-09-07 12:54:41
【问题描述】:
使用 MVVM 的 WPF 应用程序。我有一个TextBox,其Text 属性绑定到视图模型的decimal 属性。此属性表示货币值。我希望TextBox 以货币格式显示数据。为此,我在Binding 中将StringFormat 设置为“c”。这按预期工作。
问题是,如果SourceUpdateTrigger 是PropertyChanged,当用户开始输入时,在输入第一个字符后应用格式,然后插入符号位于刚刚输入的字符之前。这意味着下一个字符将在第一个字符之前而不是之后输入。如果SourceUpdateTrigger 是LostFocus,则用户必须在启用OK 按钮之前将焦点转移到另一个控件,这发生在验证货币字段之后。
我希望做的是处理 GotFocus 和 LostFocus 事件,获取对 Binding 的引用并更改其 StringFormat 属性。关于 MVVM,我对此没有任何问题,因为它纯粹是 UI 问题。问题是抛出了异常,被告知Binding使用后无法更改。
我考虑了其他各种选项,包括自定义转换器。但这不起作用,因为我不知道如何使用 ConverterParameter 将控件的 IsFocused 属性公开给转换器。
有人有什么想法吗?
【问题讨论】:
-
将
UpdateSourceTrigger留在LostFocus并处理TextChanged以在绑定上调用ValidateWithoutUpdate怎么样?
标签: wpf validation data-binding textbox binding