我有一個wpf應用程序,所有viewModel都繼承自實現INotifyPropertyChanged的NotifyPropertyChangeClass類(見下文)。Buffer PropertyChanged Events
我想限制發送到視圖的通知,以避免由於發送太多通知而導致滯後。 到目前爲止,我所實現的目標是使用反應擴展方法Sample來延遲每個屬性。
問題在於,Gui在throttlingPeriod後期被刷新了。它會覺得更適應有在這樣的週期始提出了第一個事件:
NotifyPropertyChangeClass的代碼:
using System;
using System.ComponentModel;
using System.Reactive.Linq;
namespace MyNameSpace
{
public class NotifyPropertyChangeClass : INotifyPropertyChanged
{
public NotifyPropertyChangeClass(int throttlingPeriod)
{
var obs = Observable.FromEventPattern<PropertyChangedEventHandler, PropertyChangedEventArgs>(
h => this.privatePropertyChanged += h, h => this.privatePropertyChanged -= h);
var groupedByName = obs.Select(o => o.EventArgs.PropertyName).GroupBy(x => x).SelectMany(o => o.Sample(TimeSpan.FromMilliseconds(throttlingPeriod)));
groupedByName.Subscribe(o =>
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(o));
});
}
public event PropertyChangedEventHandler PropertyChanged;
private event PropertyChangedEventHandler privatePropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = privatePropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
我如何能實現我想要什麼?
我傾向於認爲,沒有解決方案,恰好滿足你的要求。很顯然,在View中收到的事件通知之間存在延遲。你確切知道這種滯後發生的地點和原因嗎?但即使你確實知道這種滯後的原因,也不能確定你能解決這個問題。你可能不得不通過減少你的油門時間或其他東西來補償它。 – 2014-12-03 14:07:46