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,也许其他人可以添加该部分。
我用的是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,也许其他人可以添加该部分。