【问题标题】:How to execute a command when the user opens the DatePicker calendar in WPF?当用户在 WPF 中打开 DatePicker 日历时如何执行命令?
【发布时间】:2012-02-23 16:22:08
【问题描述】:

我在 WPF 窗口中使用 DatePicker,当用户尝试打开日历窗口时,我需要执行命令来刷新 MVVM 数据。 DatePicker 没有 Command 属性。

有没有办法做到这一点?

谢谢。

【问题讨论】:

  • 当用户打开日历时你想做什么?当然,您通常只需要在他实际选择日期时才需要做某事吗?
  • 我想计算要在日历上查看的第一个和最后一个日期,因为这取决于可用数据,并且每次用户单击日历时都必须刷​​新,因为应用程序将跑了很长时间。
  • 您不能通过将 DatePicker 的 DisplayDateStart 和 DisplayDateEnd 属性绑定到视图模型上的相关属性来实现这一点,然后在相关数据更改时更新这些视图模型属性(确保 PropertyChanged 事件被提出)?
  • 是一个选项,好主意,但事实是数据在数据库中,现在没有被轮询,可以这样做,但仅在用户请求时刷新数据会更容易。但我喜欢你的想法。
  • 如果您担心性能下降,在轮询数据库时,请记住数据绑定可以是异步的。

标签: wpf binding datepicker command


【解决方案1】:

好的,如果你真的想将命令附加到事件中,你可以使用这样的模式:http://petebarber.blogspot.com/2011/06/getting-wpf-sizechanged-events-at-start.html

基本上,您(在单独的文件中)定义一个与事件挂钩的附加属性。因此,在您的情况下,这将是 DatePicker 的 CalendarOpened 事件。因此,附加的属性将被称为 CalendarOpenedCommand,然后您将在实际的 DatePicker 上使用该属性,如下所示:

<DatePicker mvvm:CalendarOpenedCommand="{Binding MyCalendarOpenedCommand}" ...

但是,如果这是您将使用此功能的唯一地方,我个人认为这是矫枉过正。它可能会让一些 MVVM 纯粹主义者感到不安,但在这种情况下,我只会在后面的代码中为 CalendarOpened 放置一个单行事件处理程序,然后它可以在视图模型上调用一个方法(或者甚至是一个命令,如果你愿意的话)来通知它日历开幕。然后它可以执行其业务并相应地更新 DisplayDateStart 和 DisplayDateEnd 的绑定属性(正如我在上面的 cmets 中建议的那样)。

【讨论】:

    【解决方案2】:

    您可以为此创建附加行为,或使用this 等可用框架将事件与命令链接。从那里你可以在你的视图模型中公开和绑定你的命令,并将你的更新逻辑放在那里。

    这个问题也确实属于these之类的问题。

    【讨论】:

      猜你喜欢
      • 2013-12-17
      • 1970-01-01
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 1970-01-01
      相关资源
      最近更新 更多