TimePicker 丢失了 Binding

TimePicker lost the Binding

我用的是Mahapp TimePicker控件,我是这样定义的:

<Controls:TimePicker Culture="it-IT" Width="200" Controls:TextBoxHelper.Watermark="Start pause" SelectedTime="{Binding Stop, IsAsync=True, UpdateSourceTrigger=PropertyChanged}"/>

这是绑定值的属性:

private TimeSpan? _stop;
public TimeSpan? Stop
{
        get { return _stop; }
        set
        {
            _stop = value;
            OnPropertyChanged();
        }
}

这是我的 OnPropertyChanged(); 实现:

public new event PropertyChangedEventHandler PropertyChanged;

protected new virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

情况是这样的:当我更改控件上的值时,这并没有执行绑定,这只发生在第一次,我第二次执行绑定时,值被正确获取。如果我在 get 和 set 上都放置了一个断点,那么绑定似乎是正确完成的。我不知道发生了什么。

删除 IsAsync = true。 IsAsync 仅应在您的 getter 预期 return 具有明显延迟的结果时使用。或者正如微软所说:

Use the IsAsync property when the get accessor of your binding source property might take a long time. One example is an image property with a get accessor that downloads from the Web. Setting IsAsync to true avoids blocking the UI while the download occurs.

所以基本上 getter 在另一个线程中执行,并且 return 完成后将值发送到绑定。不知道 WPF 如何使用 IsAsync 实际处理 setter,也许其他人可以添加该部分。