かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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);
        });
    }
}