给出此设置
public static class NotifyPropertyChangedExtensions
{
public static IObservable<EventPattern<PropertyChangedEventArgs>> WhenPropertyChanged(this INotifyPropertyChanged source)
{
return Observable.FromEventPattern<PropertyChangedEventHandler, PropertyChangedEventArgs>(
ev => source.PropertyChanged += ev,
ev => source.PropertyChanged -= ev);
}
}
public class Node : INotifyPropertyChanged
{
public bool IsChecked
{
get => _isChecked;
set
{
if (_isChecked != value)
{
_isChecked = value;
OnPropertyChanged();
}
}
}
}
nodes.Values.Select(node => node.WhenPropertyChanged())
.Merge()
.Where(x => x.EventArgs.PropertyName == "IsChecked")
.Throttle(TimeSpan.FromMilliseconds(200))
.Subscribe(x =>
{
// do somethings
});
为什么我打电话时不触发任何事件? nodeX.IsChecked = true; 设置订阅后立即使用,但以后可以使用吗?
答案 0 :(得分:0)
您确实意识到这是Throttle
运算符的预期行为:
仅在经过特定时间跨度时才从Observable中发射一项,而不发射另一项
(source)
因此,在您的情况下,由于您在应用Merge
运算符之前执行了Throttle
,所以在将IsChecked
更改为之后,之后,会发出一个项目200毫秒