かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

Throttleの間隔を別のRxPropから動的に指定したい

こんなつぶやきを見たので。

書いてみたけど、こんな感じかなぁ?

public class MainWindowViewModel : BindableBase
{
    public ReactiveProperty<string> Input { get; private set; }

    private ReactiveProperty<string> output;

    public ReactiveProperty<string> Output
    {
        get { return this.output; }
        set { this.SetProperty(ref this.output, value); }
    }

    public ReactiveProperty<int> Interval { get; private set; }

    public MainWindowViewModel()
    {
        this.Input = new ReactiveProperty<string>();
        this.Interval = new ReactiveProperty<int>();
        this.Interval.Subscribe(v =>
        {
            var initialValue = default(string);
            if (this.Output != null)
            {
                initialValue = this.Output.Value;
                this.Output.Dispose();
            }
            this.Output = this.Input.Throttle(TimeSpan.FromSeconds(v)).ToReactiveProperty(initialValue);
        });
    }
}