我正在使用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上都设置了一个断点,那么看起来绑定是正确完成的。我不喜欢什么。
答案 0 :(得分:2)
删除IsAsync = true
。只应使用IsAsync,当预期getter会以明显的延迟返回结果时。或者正如微软所说:
当绑定源属性的get访问器可能需要很长时间时,请使用IsAsync属性。一个示例是具有从Web下载的get访问器的图像属性。将IsAsync设置为true可避免在下载时阻止UI。
所以基本上getter在另一个线程中执行,并在完成后将值返回到绑定。不知道WPF如何实际处理IsAsync
的setter,也许其他人可以添加该部分。