WPF + DatePicker + UpdateSourceTrigger = 显式

Posted

技术标签:

【中文标题】WPF + DatePicker + UpdateSourceTrigger = 显式【英文标题】:WPF + DatePicker + UpdateSourceTrigger = Explicit 【发布时间】:2015-01-06 11:57:09 【问题描述】:

我有一个 datePicker,我已将它的 Text 属性绑定到一个视图模型。

我没有选择 UpdateSourceTrigger 作为 propertyChanged,而是使用 Explicit。 在 KeyDown 事件中,我调用了 binding.UpdateSource() 方法。

我面临的问题是,当我在文本框中输入值 30/10/1983 时,在视图模型中,我最终只有值 30/10/198。我没有得到最后输入的数字,除非我做了失焦或制表符。

当我输入第一个值 3 时,视图模型属性被通知为 NULL。

我应该订阅其他活动吗?

我做错了什么,有人可以帮忙吗?

另外,我在视图模型中使用字符串属性而不是 DateTime?这是正确的方法吗?

谢谢

【问题讨论】:

您在KeyDown 事件中做了什么要求您明确更新源?手头的问题是在 DatePicker 值更新之前调用了 KeyDown 事件,但我找不到之后引发的任何事件。 @hantoun 我也没有发现任何此类事件。我需要 datepicker 以 dd/mm/yyyy 的形式接受用户输入。此条目不会触发对视图模型的回发。但以 mm/dd/yyyy 格式输入日期会触发回发。 也许this question 可以帮助您找到您正在寻找的解决方案。如果我是你,我会尝试设置正确的 CultureInfo 而不是搞乱静态格式。在任何情况下,它都允许您绑定到DateTime 源。 @hantoun 我尝试更改字符串格式,但它对我不起作用,它仍然接受 mm/dd/yyyy 而不是 dd/mm/yyyy 【参考方案1】:

在 Dispatcher 中调用 binding.UpdateSource() 来完成这项工作。我的假设是 datePicker 仅在 TextChanged 事件之后更新值。因此,在 Dispatcher 调用中移动 binding.UpdateSource() 将解决您的问题。 http://msdn.microsoft.com/en-us/library/cc190824%28v=vs.110%29.aspx

【讨论】:

以上是关于WPF + DatePicker + UpdateSourceTrigger = 显式的主要内容,如果未能解决你的问题,请参考以下文章

在 WPF 的 DatePicker 中显示当前日期

WPF:DatePicker 文本垂直居中

WPF 4.0 DatePicker 快速录入

编辑 WPF 工具包以仅获取 DatePicker

如何从 C# 中的 DatePicker(WPF) 中获取价值?

如何本地化 WPF 4.0 DatePicker 控件