我正在尝试限制生成的事件,我正在创建一个合并两种类型事件的流。我正在监视一组记录,如果发生事件可能会触发
1. 添加/删除行时的 CollectionChangedEvent。
2.当一项的值发生变化时的PropertyChangedEvent
public IObservable<IEnumerable<ChangeDTO>> GetChangeStream()
{
IObservable<IEnumerable<ChangeDTO>> allItems =
Observable.FromEventPattern<CollectionChangedEventArgs>(
x => source.CollectionChanged += x,
x => source.CollectionChanged-= x)
.Select(i => new ChangeDTO(source.SelectedItems, true, null)})
.Buffer(Timespan.FromMilliSeconds(300);
IObservable<IEnumerable<ChangeDTO>> updatedItem =
Observable.FromEventPattern<PropertyChangedEventArgs>(
x => source.PropertyChanged += x,
x => source.PropertyChanged -= x).
Select(i => new List<ChangeDTO>() {new ChangeDTO(new[] {source.Item}, false, source.UpdatedProperties)};
return allItems.Merge(updatedItems);
}
public class ChangeDTO
{
ChangeDTO(IEnumerable<SourceDTO> items, bool recalculateAll, IEnumerable<string>
propertiesChanged)
}
如果 CollectionChangedEvent 在 300 毫秒内触发,我正在尝试清除 PropertyChangedEvent 缓冲区,即对属性更改不感兴趣并想忽略它们。仅当没有触发 CollectionChangedEvent 时,才对属性更改感兴趣。