如何限制滑块的值更改事件?

Val*_*zub 16 silverlight throttling mvvm system.reactive

我有一个滑块,在值变化时会强制进行相当严重的计算,所以我希望在用户完成滑动后,例如在50ms后通过它来触发实际事件.

虽然我学到了一些关于Rx的各种东西,但我不清楚如何使用MVVM模式来解决这个问题.

在我目前的MVVM方法中,我将滑块值绑定到我的viewModel.我更愿意添加Rx节流,对现有代码的影响最小(至少作为开头).

我已经看到了一些关于MVVM和Rx的其他线程,我认为它们并没有让我对我的问题有一些确切的指导.我看到各种可能的方法,并希望不发明一个自行车.

Ana*_*tts 25

在这种情况下,您应该绑定到ViewModel的PropertyChanged事件,例如:

Observable.FromEvent<PropertyChangedEventArgs>(x => this.PropertyChanged +=x, x => this.PropertyChanged -= x)
    .Where(x => x.PropertyName == "SliderName")
    .Select(_ => this.SliderName)
    .Throttle(TimeSpan.FromMilliseconds(50));
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用ReactiveUI,它看起来像这样:

this.WhenAnyValue(x => x.SliderName)
    .Throttle(TimeSpan.FromMilliseconds(50), RxApp.DeferredScheduler);
Run Code Online (Sandbox Code Playgroud)