【问题标题】:ReactiveUI with WPF DatePicker带有 WPF DatePicker 的 ReactiveUI
【发布时间】:2019-10-30 12:55:06
【问题描述】:

我无法使用 ReactiveUI 按预期绑定到 WPF DatePicker 工作。 绑定是在这样的代码中设置的:

this.Bind(this.ViewModel, x => x.MyDate, x => x.DPMyDate.SelectedDate, DPMyDate.Events().LostKeyboardFocus).DisposeWith(disposables);

在 XAML 文件中如下所示:

<DatePicker Name="DPMyDate"></DatePicker>

绑定的属性是这样的:

private DateTime myDate;
public DateTime MyDate
{
    get { return myDate; }
    set
    {
        this.RaiseAndSetIfChanged(ref myDate, value);
    }
}

通过日历更改日期按预期工作。但是,当我使用键盘更改日期时,绑定属性不会更改! 有趣的是,当我在更改日期后将焦点移出 DatePicker,然后再次进出(不更改任何内容)时,原始更改被设置。我想这与 DatePicker 及其 TextBox 的内部焦点处理有关,但我不明白它是 WPF 还是 ReactivUI 的问题。

有什么想法吗?

更新 1

作为测试,我直接为 DatePickers LostKeyboardFocus 事件分配了一个处理程序。每次控件失去焦点时,此事件似乎都会触发。然而,ReactiveUI 并没有发现第一次失去焦点!

【问题讨论】:

    标签: wpf reactiveui


    【解决方案1】:

    抱歉,在我发布问题 40 分钟后现在回答我自己的问题。但是一分钟前我发现绑定到 LostKeyboardFocus 是 DatePickers 的错误方式。应该绑定到 SelectedDateChanged!

    在 LostKeyboardFocus 中,SelectedDate 仍然具有其原始值,这就是 ReactiveUI 在第一次失去焦点时没有正确更改属性的原因。在进一步失去焦点时,它总是落后一个变化。

    不知何故,我觉得这应该与 TextBoxes 一样工作,您通常只想在框失去焦点时触发更改,但 DatePicker 在这里很特别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多